评估 == 和 & 时的困惑

标签 c evaluation operator-precedence

为什么会出现下面的语句:

int a = 10;
a&8 == 8; 

返回假 (0) ?

我知道 ==& 有更高的优先级,但它仍然应该检查 8 == 8 是否应该计算true,但其评估为 false。

任何人都可以通过推理帮助我。

最佳答案

a & 8 == 8a & (8 == 8) 因为 == 的优先级高于 & ( here )

所以 8 == 81a = 10 是二进制的 1010

所以

  00000001
& 00001010
  --------
  00000000

有趣的事实: 虽然在 C 语言中 false 是一个零而 true 是任何非零值。但是,如果相等运算符的计算结果为真,它保证计算结果为 1,否则为 0。 Referrer C99 Section 6.5.9 Paragraph 3

关于评估 == 和 & 时的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18075367/

相关文章:

python - 将十六进制值写入文件 Python

machine-learning - 如何评价一个具有相关顺序的建议系统?

c++ - 是否允许 C++ 优化器跨函数调用移动语句?

c - 关于在c程序中使用动态分配的二维数组的问题

c - while循环,直到用户键入特定字母

c# - 数学表达式求值器出错

lisp - Racket中 `parameterize'和 `let'的求值顺序是怎样的?

c++ - 为什么按此顺序评估 '--++a-​-++ +b--'?

c++ - if 语句中运算符优先级的解释

c - 我的反向函数出了什么问题