在 K&R 的《C 编程语言》第 2 期第 42 页第 2.6 节“关系和逻辑运算符”中,作者表示:
By definition, the numeric value of a relational or logical expression is 1 if the relation is true, and 0 if the relation is false.
我对这个措辞感到困惑。例如,在逻辑表达式中
x && y
不存在正确或错误的关系。措辞不应该是:
By definition, the numeric value of a relational or logical expression is 1 if the expression is true, and 0 if the expression is false.
最佳答案
x && y
由于 x 和 y 与 &&
结合使用,编译器需要逻辑( bool )值
在c中,0
为假,而非0
为真。因此,您从标准中发布的声明是,逻辑表达式的计算结果为 0 或非零(实际上是 1,但在测试中任何非零值都被视为 true)。
因此这段代码被解释为
(x != 0) && (y != 0)
这取决于 x 和 y 的当前值,例如
1 && 0
这是
true && false
遵循 0 == false 且 !0 == true 的规则。因此,该表达式为 false,因此您发布的语句的计算结果为 0。
请注意,这种困惑很大程度上来自于 c 最初没有 bool 类型这一事实。因此约定 0 = false 并且 !0 = true。这具有允许直接测试数字(特别是指针)的有益副作用,如
while(ptr--)
{
}
相当于
while(ptr-- != 0)
{
}
关于C by K&R - 关系或逻辑表达式的数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48588702/