在how to write fast code课上,老师展示了一段怎么样求下一个2的幂的代码,比如输入是1000,返回1024,输入9,返回16等等
int nextPowerOfTwo(int n) {
n--;
n = n >> 1 | n;
n = n >> 2 | n;
n = n >> 4 | n;
n = n >> 8 | n;
n = n >> 16 | n;
// n = n >> 32 | n; // For 64-bit ints
return ++n;
}
这个代码巧妙的把最高位的1填满所有的位,然后加1就得到了下一个2的幂。在填1的构成中,可以看到,速度是每次double的。
想不到比这更好的方法了,珍藏在这里吧。