高效判断数字是否为2的幂次方

最近在看 netty 源码的一些实现,偶然看到这个判断数字是否为2的幂次方的方法,觉得很高效,所以贴出来跟大家一起分享:

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

由于与运算符是处理器运算,要比其他的运算高效得多,这里拿8来举个例子:

  • 8 的二进制为 1000
  • -8 的二进制补码为正码取反加一,为 1000
  • 进行位与运算之后,8 & -8 结果仍为 8
  • 事实上,以2为幂次方的的数字,都是最高位为1,其余为0,所以对应负数的补码还是自己
发布了29 篇原创文章 · 获赞 9 · 访问量 9951

猜你喜欢

转载自blog.csdn.net/weixin_42669785/article/details/97010736
今日推荐