首页 > 解决方案 > 使用左移检查一行中 2 的幂

问题描述

谁能建议一种方法来检查一个数字是否是 2 的幂,仅使用 << 运算符,我的意思是没有 + , - * , / ,循环。某种单线的东西。
如果不能,你可以给我最小的算法,使用你想到的 <<

标签: algorithmbit

解决方案


如果一个数字是 的幂在二进制表示2中只有一位。110,100100000。如果你减去一个,你会得到整个1。比如10-1=1100-1=11等等。这就是为什么如果你这样做x&(x-1),你会得到全零。所以你可以使用下面的公式

x && (!(x&(x-1)))

下面表达式中的第一个 x 是针对 is 的x情况0


推荐阅读