“n>> 1”与操作与“n/2"有区别是有区别的。比如n为负数且不是2的倍数时,就不一样。举个最简单的例子,n=-1,n>>1还是-1,但n/2的结果就是0。
因此,如果n可能为负数,n&1 和n%2==1不等价。
下面两行代码才等价,所有判定时首选n&1的位运算
// if(n&1){
if(n%2==1||n%2==-1)
“n>> 1”与操作与“n/2"有区别是有区别的。比如n为负数且不是2的倍数时,就不一样。举个最简单的例子,n=-1,n>>1还是-1,但n/2的结果就是0。
因此,如果n可能为负数,n&1 和n%2==1不等价。
下面两行代码才等价,所有判定时首选n&1的位运算
// if(n&1){
if(n%2==1||n%2==-1)