gandixiwang 发表于 2022-9-9 15:04:50

求助

if (num & num - 1)
{
      printf("参数队伍的数量必须是2的N次方!\n");
      return -1;
}
8 的二进制形式是:1000
16 的二进制形式是:10000
32 的二进制形式是:100000
64 的二进制形式是:1000000
128 的二进制形式是:10000000

可以发现:无一例外,只要是 2 的 N 次方,表示为二进制,必须是 1 + N 个 0 的形式。
所以也必须满足 num & num - 1 == 0 的条件!(比如 7 的二进制是 111,8 & 7 == 1000 & 111 == 0)

这个是什么原理,我怎么看不懂{:10_247:} {:10_244:}

wp231957 发表于 2022-9-9 15:11:07

都是二进制
1000-1=111
1000 & 111=0

gandixiwang 发表于 2022-9-9 15:22:27

wp231957 发表于 2022-9-9 15:11
都是二进制
1000-1=111
1000 & 111=0

& 在这里起什么作用?

我就只知道可以拿来取地址

人造人 发表于 2022-9-9 15:24:43

gandixiwang 发表于 2022-9-9 15:22
& 在这里起什么作用?

我就只知道可以拿来取地址

与运算,按位与
&& 逻辑与
& 按位与

wp231957 发表于 2022-9-9 15:27:37

gandixiwang 发表于 2022-9-9 15:22
& 在这里起什么作用?

我就只知道可以拿来取地址

百度一下位运算
页: [1]
查看完整版本: 求助