※요약
어떤 수가 있을 때, 이 수가 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 |