请高手来解释一下

java_zhengjd 2010-04-12 09:33:40
if(n & (n-1) == 0) return true;
else return false;
这是在判断一个数是否为2的幂次,请高手来具体解释一下,具体的运算过程。
...全文
96 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vlemfun 2010-04-12
  • 打赏
  • 举报
回复
学习了
都是高手啊
jacky花园 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 keeya0416 的回复:]
引用楼主 java_zhengjd 的回复:
if(n & (n-1) == 0) return true;
else return false;
这是在判断一个数是否为2的幂次,请高手来具体解释一下,具体的运算过程。

如果一个数是2的幂,那么它的2进制里只有一位是1 其他都是 0
那么该数减1 后 它的2进制中是1 的那一位变成了0 后边的 0 都是1 了
故有 ……
[/Quote]

up
keeya0416 2010-04-12
  • 打赏
  • 举报
回复
结贴是个好习惯。。。。
哈哈
java_zhengjd 2010-04-12
  • 打赏
  • 举报
回复
谢谢了,终于弄清楚了这个东东,以后还愿各位不吝赐教。
keeya0416 2010-04-12
  • 打赏
  • 举报
回复
如果一个数是2的幂,那么它的2进制里只有一位是1 其他都是 0
那么该数减1 后 它的2进制中是1 的那一位变成了0 后边的 0 都是1 了
故有 (n & (n-1)) == 0;
相反 如果一个数不少2 的幂 ,那么它的的2进制里就会有多位是1
那么该数减1后 只是最后的那个1边成0,该1后的0变成1。
而该数前边的1都是不会变的
也即 (n & (n-1)) > 0;
keeya0416 2010-04-12
  • 打赏
  • 举报
回复
n & (n-1) == 0;是错的
要写成 (n & (n-1)) == 0;
keeya0416 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 java_zhengjd 的回复:]
if(n & (n-1) == 0) return true;
else return false;
这是在判断一个数是否为2的幂次,请高手来具体解释一下,具体的运算过程。
[/Quote]
如果一个数是2的幂,那么它的2进制里只有一位是1 其他都是 0
那么该数减1 后 它的2进制中是1 的那一位变成了0 后边的 0 都是1 了
故有 n & (n-1) == 0;
soooooga 2010-04-12
  • 打赏
  • 举报
回复
&是按位运算符
参与运算的两个值,如果两个相应的位都为1,则该位的结果为1,否则为0,即:
0&0 = 0 ;0&1=0 ;1&0=0;1&1=1;
例如:0010 1010 & 0001 0111 = 0000 0010

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧