ビット演算の判断2の正の整数べき乗
2263 ワード
n n 2
:(! (n & (n-1)) && n
: n = 16 = 10000,n-1 = 15 = 1111
:10000 & 01111 = 00000 = 0
: n = 256 = 10000000 ,n-1 = 255 = 11111111
:100000000 & 011111111 = 000000000 = 0
, n 2 , n 1000.... n-1 1111....
: n & n-1 = 0 (! (n & (n-1)) 1 ; && n : n
コードは次のとおりです.
#include
int main(){
int n;
while(~scanf("%d",&n)){
if(!(n & (n-1)) && n)
printf("%d 2
",n);
else
printf("%d 2
",n);
}
return 0;
}