Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C에서 2의 거듭제곱

<시간/>

숫자 n이 있다고 가정합니다. 숫자가 2의 거듭제곱인지 아닌지 확인해야 합니다. 따라서 n =16이면 출력이 참이 되고 n =12이면 거짓이 됩니다.

이를 해결하기 위해 논리 연산을 사용합니다. 2의 거듭제곱인 숫자가 표시되면 해당 숫자의 이진 표현에서 MSb는 1이고 다른 모든 비트는 0입니다. 따라서 [n AND (n – 1)]을 수행하면 다음이 반환됩니다. n이 2의 거듭제곱이면 0입니다. 이진수로 n =16 =10000, 이진수로 (n – 1) =15 =01111이면 10000 AND 01111 =00000 =0

예시(다)

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

#include <stdio.h>
#include <math.h>
#define MAX 20
bool isPowerOfTwo(int n){
   return(n>0 && !(n & (n-1)));
}
int main() {
   printf("%s\n", isPowerOfTwo(16) ? "true" : "false");
   printf("%s\n", isPowerOfTwo(12) ? "true" : "false");
   printf("%s\n", isPowerOfTwo(1) ? "true" : "false");
   printf("%s\n", isPowerOfTwo(32) ? "true" : "false");
   printf("\n");
}

입력

16
12
1
32

출력

true
false
true
true