if(n & (n-1) == 0) return true;
else return false;
这是在判断一个数是否为2的幂次,请高手来具体解释一下,具体的运算过程。

解决方案 »

  1.   

    &是按位运算符
    参与运算的两个值,如果两个相应的位都为1,则该位的结果为1,否则为0,即:
    0&0 = 0 ;0&1=0 ;1&0=0;1&1=1;
    例如:0010 1010 & 0001 0111 = 0000 0010
      

  2.   

    如果一个数是2的幂,那么它的2进制里只有一位是1 其他都是 0
    那么该数减1 后 它的2进制中是1 的那一位变成了0 后边的 0 都是1 了
    故有 n & (n-1) == 0;
      

  3.   

    n & (n-1) == 0;是错的
    要写成 (n & (n-1)) == 0;
      

  4.   

    如果一个数是2的幂,那么它的2进制里只有一位是1 其他都是 0
    那么该数减1 后 它的2进制中是1 的那一位变成了0 后边的 0 都是1 了
    故有 (n & (n-1)) == 0;
    相反 如果一个数不少2 的幂 ,那么它的的2进制里就会有多位是1
    那么该数减1后 只是最后的那个1边成0,该1后的0变成1。
    而该数前边的1都是不会变的
    也即 (n & (n-1)) > 0;