最直观
1 | def getNextPowerOf2(x: Int): Int = { |
移位操作
1 | n--; // 1101 1101 --> 1101 1100 |
- 右移1位,做或,保证最高位、最高位下一位为“1”;这样有2位为“1”了,进而右移2位,做或,保证最高4位为“1”;进而在右移4位(不停的乘2),做或……最后得到所有位都为“1”,再
n++
,可得一个2的幂。 n--
是为了处理n
本身是2的幂的场景。如不做n--
,会得到n
的2倍作为结果。- 处理32位整数,可扩展,如处理64位整数,添加
n >> 32
。
1 | def getNextPowerOf2(x: Int): Int = { |