如何使用位运算符检查整数是偶数还是奇数

73

如何使用位运算符检查整数是偶数还是奇数

12个回答

0

方法1:简短且无需明确与1进行比较

if (number & 1) {
  // number is odd
}
else {
  // number is even
}

方法2:需要一个额外的括号和与0的显式比较

if((num & 1) == 0){ // Note: Bracket is MUST around num & 1
  //  number is even
}
else {
  // number is odd
}

如果我在上面的代码中错过了括号,会发生什么?
if(num & 1 == 0) { } // wrong way of checking even or not!!

变成

if(num & (1 == 0)) { } // == is higher precedence than &

https://en.cppreference.com/w/cpp/language/operator_precedence


0

这是一个老问题,然而其他答案都没有提到这一点。

除了使用 num & 1,你还可以使用 num | 1 > num

这个方法的原理是,如果一个数是奇数,那么结果值将会与原始值相同,因为原始值 num 将从第一位开始设置,但如果原始值 num 是偶数,则第一位不会被设置,所以将其更改为 1 将使新值增加一。


小心点,这个可能会有点棘手!最好加上括号 num | 1... https://en.cppreference.com/w/c/language/operator_precedence - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接