※요약
어떤 수가 있을 때, 이 수가 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;
}
}
'예제 모음 > C/C++' 카테고리의 다른 글
| [C언어] rand 함수를 이용한 로또 프로그램 (1) | 2014.04.08 |
|---|---|
| [C언어] 재귀 함수 - 10진수 -> 2진수 변환 (1) | 2014.03.20 |
| [C언어] 소수점 특정 자릿수 반올림하기 - ROUND 함수 (0) | 2014.03.14 |
| [C언어] 재귀 함수 - 이진 탐색 (Binary Search) (0) | 2013.12.05 |
| [C언어] 재귀 함수 - 거듭제곱 (power) (3) | 2013.12.05 |
| [C언어] 재귀 함수 - 팩토리얼 (Factorial) (3) | 2013.12.05 |
| [C언어] 재귀 함수 - 함수의 재귀적 호출 (3) | 2013.12.04 |