利用位与 & 运算,判断一个整数是否是2的整数次幂。
分析过程:
二进制数的位权是2的n次方,通过观察发现如果一个数m是2的n(n>=0 )次方,那么它的二进制数的最高位必定为1,其余位都是0;
比如2 -->10 2^2 -->100 2^3 -->1000 2^4 -->10000 这是一些符合要求的m值对应的二进制数
m-1:1 -->01 3 -->011 7 -->0111 15 -->01111 这是一些m-1的值 对应的二进制数
m&(m-1): 00 000 0000 00000 满足条件的m,m&(m-1) ==0;得出结论:如果一个整数m是2的n次方,那么m&(m-1)一定为0;即使m=1也是满
足的
不符合的m: 3 -->011 7 -->0111 15 -->01111 这是一些整数不是2的n次幂 对应的二进制数
减1: 2 -->010 6 -->0110 14 -->01110 这是不满足条件的整数减去1之后对应的二进制数
m&(m-1): 010 0110 01110 不满足条件的m,m&(m-1) !=0;得出结论:如果一个整数m不是2的n次方,那么m&(m-1)一定不为0
#include <stdio.h>
/*
二进制数的位权是2的n次方,通过观察发现