下面的代码为什么能够检验一个数是否是2的n次方
// 检查num是否2的N次方// 注意,这里是&,不是&&
// &是按位与操作,1&1==1,0&1==0,0&0 == 0
if (num & num - 1)
{
printf("参数队伍的数量必须是2的N次方!\n");
return -1;
} 一开始没看到,现在知道了 本帖最后由 jackz007 于 2019-4-3 23:45 编辑
2 ** n 如果用二进制表示,整个数只有一个位是 1,例如:
0000 0000 0000 0001 2 ** 0
0000 0000 0000 0010 2 ** 1
0000 0000 0000 0100 2 ** 2
0000 0000 0000 1000 2 ** 3
0000 0000 0001 0000 2 ** 4
0000 0000 0010 0000 2 ** 5
......
1000 0000 0000 0000 2 ** 15
以 2 ** 15 为例,减 1 以后变为:
0111 1111 1111 1111
那么:
1000 0000 0000 0000 & 0111 1111 1111 1111 = 0 是必然的!
这应该就是其中的规律了。
页:
[1]