首页 > 试题广场 >

下面的表达式可以判断一个INT32无符号整数n是不是2的幂次

[不定项选择题]
下面的表达式可以判断一个INT32无符号整数n是不是2的幂次方的是
  • (n & (n-1)) == 0
  • (n % 2) == 0
  • (n & (n+1)) == 0
  • (n & (n+1)) % 2 == 0
(n % 2) == 0 存在n=0的情况
&是&号吗?

2的幂次方分别为 0001 0010 0100 1000 00010000
从上可以看出2的幂次方总是在bit上进1,其余全为0,假如用它减去1后就变成 0000 0001 0010 0111 00001111
这样的结果就是原本1的前面全为0减去1后还是0,而原本的1变为0,原本在1后面的0全变成1,所以n和n-1相与&就会是0
这是2的幂次方数的一个特点

发表于 2020-03-08 23:00:27 回复(0)