※요약

어떤 수가 있을 때, 이 수가 2의 n승인지 판별하는 방법입니다.



※특징

비트 연산을 이용해 속도가 빠름



※함수 설명

2의 3승인 8을 2진수로 표현하면 아래와 같습니다.(편의상 8비트로 표현)

0000 1000

여기서 1을 빼주면

0000 0111이 되고, 0000 1000와 & 연산을 하게 되면 0이 나옵니다.


0000 1000

0000 0111

-------------&연산 (& 연산자는 두 개의 비트가 모두 1일 때 1이 됨, 고로 여기서는 0이 됨)

0000 0000


비트 연산 보기





※예제

#include <stdio.h>

bool CheckPowerOfTwo( int nNum );

int main( )
{
	int x = 0;
	bool bState = false;

	printf( "-1 입력시 종료 됩니다.\n" );

	while( x != -1 )
	{
		printf( "숫자를 입력하세요 : " );
		scanf( "%d", &x );

		bState = CheckPowerOfTwo( x );

		printf( "%d은(는) 2의 n승이 %s\n\n", x, (bState ? "맞습니다." : "아닙니다.") );
	}

	return 0;
}

bool CheckPowerOfTwo( int nNum )
{
	int nResult = nNum & (nNum-1);

	if( nResult == 0 )
	{
		return true;
	}
	else
	{
		return false;
	}
}



+ Recent posts