C++ 中 !(n & 1) 和 n & 1 == 0 之间的区别

mav*_*.01 1 c++ bit-manipulation bit bitwise-operators bitwise-and

由于某些原因,在 C++ 中,表达式if(!(n & 1))if(n & 1 == 0)似乎不等价。

有人可以解释为什么会发生这种情况吗?

Azi*_*ziz 14

  • if(!(n & 1))将评估 的true 最低有效位是否n1

  • if(n & 1 == 0)相当于if(n & (1 == 0)), 将会成为,永远if (n & 0)是。false

查看运算符优先级表,您将看到==优先级&


Jos*_*ica 9

由于运算符优先级。n & 1 == 0被解析为n & (1 == 0), not (n & 1) == 0