判断一个数是否为2的幂次方
程序员文章站
2024-02-02 08:36:04
...
看netty源码的时候,看到有一个关于如何判断一个int数值是否为2的幂次方的算法,感觉蛮有意思的,所以简单记录一下。
先说一下通常判断一个数是否为2的幂次方我会怎么做, 随便写一个最暴力的
明显看出这种方法不优雅,现在介绍netty中看到的是怎么做的
提一下在计算机中负数的二进制采用正数的补码,其他具体为什么感觉也不需要追溯了,第二个方法明显优雅多了
先说一下通常判断一个数是否为2的幂次方我会怎么做, 随便写一个最暴力的
public static boolean isPowerOf2(int n) { if (n < 1) return false; int i = 1; while (i <= n) { if (i == n) return true; i <<= 1; } return false; }
明显看出这种方法不优雅,现在介绍netty中看到的是怎么做的
private static boolean isPowerOfTwo(int val) { return (val & -val) == val; }
提一下在计算机中负数的二进制采用正数的补码,其他具体为什么感觉也不需要追溯了,第二个方法明显优雅多了