读书人

这个表达式您一眼看得出结论来吗?if (

发布时间: 2012-10-25 10:58:57 作者: rapoo

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

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

2 楼 huaihenu 2011-06-10 位运算很考验人的思维 3 楼 huzhenyu 2011-06-10 superobin 写道楼主的理解还不够严密,有点问题应。满足条件的数应该是
0 (n=0)
2^(n-1) (n>=1)

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



谢谢楼上指正,确实有误,已改正! 4 楼 antonia 2011-06-16 Java学多了也会乱掉

读书人网 >编程

热点推荐