📜  算法|位算法|问题2(1)

📅  最后修改于: 2023-12-03 15:11:32.741000             🧑  作者: Mango

算法 | 位算法 | 问题2

在计算机科学中,位运算是指直接对整数在内存中的二进制位进行操作。位运算常用来提高代码的执行效率。

问题2:如何判断一个整数是2的幂次方?

答:判断一个整数n是否是2的幂次方可以使用位运算。如果一个整数n是2的幂次方,那么它的二进制表示中只有一个1。例如,2的二进制表示是10,4的二进制表示是100,8的二进制表示是1000。因此,判断一个整数n是否是2的幂次方的方法为:

if((n & (n - 1)) == 0) {
    // n是2的幂次方
} else {
    // n不是2的幂次方
}

代码解释:

  • 两个整数相减的结果,会将二进制表示中的最右边的1变为0(如6和5的二进制表示分别是110和101,则6-5=1=0001),因此,如果一个整数n是2的幂次方,那么n的二进制表示中只有一个1,n-1的二进制表示中,从n中的1位开始,到最右边的所有位都是0,将最右边的1,变成了0,其他位变成1。例如,若n=8,则n的二进制表示为1000,n-1的二进制表示为0111。
  • 利用&运算符,将n的二进制表示与n-1的二进制表示进行与运算,得到的结果如果为0,那么表示n只有一个1,即n是2的幂次方;否则,n不是2的幂次方。

注:此方法同样适用于判断一个整数是否为4的幂次方,只需判断(n & (n - 1)) == 0 && (n & 0x55555555) != 0即可(0x55555555是一个整数,二进制表示为01010101010101010101010101010101,表示每相邻两位为1)。

以上就是判断一个整数是否是2的幂次方的方法,通过位运算,可以高效地解决该问题。