论坛首页 综合技术论坛

这个表达式你一眼看得出结论来吗?if ((n & -n) == n)

浏览 1655 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-06-09   最后修改:2011-06-10
如题,很惭愧本人确实没有一眼看出来.首先定性思维第一反应把"&"理解成了"&&".java用了好几年了位运算却用得很少,习惯性的想到了更常用的与运算.后面当认识到这个错误时,用枚举的方式得出了一个结论原来是在找为2的n次方以及为0的数字.注:如果不是枚举,就拿int做二进制转换再做分析,得出这个结论可能还要多花些时间.当然如果有了结论反过来再验证被容易些.
这是群里朋友问的一个问题(本人好解决问题的),此题一出想了一秒就给了一个错误的结论.从中反思得出如下观点,希望自己以后自醒:
1.简单的问题最好实践后再给结论
2.想当然很多时候是一种病,我们程序员要引起重视的
3.基础的东西,什么时候去加强都不为过.
4.枚举,归纳法,这些小学数学就在接触的东西,到现还是很有用.
   发表时间:2011-06-10   最后修改:2011-06-10
楼主的理解还不够严密,有点问题应。满足条件的数应该是
0 (n=0)
2^(n-1) (n>=1)

另外任何负数均不可能返回true,因为标识位 肯定一个是0一个是1,而楼主说的是绝对值为2的n次方

0 请登录后投票
   发表时间:2011-06-10  
位运算很考验人的思维
0 请登录后投票
   发表时间:2011-06-10  
superobin 写道
楼主的理解还不够严密,有点问题应。满足条件的数应该是
0 (n=0)
2^(n-1) (n>=1)

另外任何负数均不可能返回true,因为标识位 肯定一个是0一个是1,而楼主说的是绝对值为2的n次方



谢谢楼上指正,确实有误,已改正!
0 请登录后投票
   发表时间:2011-06-16  
Java学多了也会乱掉
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics