java 判定一个数是否是2的幂次

private static boolean isPowerOfTwo(int val) {
      return (val & -val) == val;
}

分析,比如8,二进制:00001000

-8的二进制表示是其反码+1,反码即8的二进制取反,为:11110111,所以反码+1为:11111000。

8&-8即为

00001000

&

11111000

=

00001000

得到的就是8的二进制。

2的次幂在二进制中,肯定只有一位为1,其余为0.而它的负数表示,也刚好在这一位中为1,所以两个值&得到的刚好是它本身。

posted @   Gyoung  阅读(1446)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示