如何使用位运算符检查整数是偶数还是奇数
方法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
这是一个老问题,然而其他答案都没有提到这一点。
除了使用 num & 1
,你还可以使用 num | 1 > num
。
这个方法的原理是,如果一个数是奇数,那么结果值将会与原始值相同,因为原始值 num
将从第一位开始设置,但如果原始值 num
是偶数,则第一位不会被设置,所以将其更改为 1 将使新值增加一。
num | 1
... https://en.cppreference.com/w/c/language/operator_precedence - undefined