C by K& R - 关系或逻辑表达式的数值

时间:2018-02-02 18:21:31

标签: c expression semantics

在K& R的“The C Programming Language”第42页的第2.6节“关系和逻辑运算符”中,作者说:

  

根据定义,是关系或逻辑表达式的数值   如果关系为真,则为1;如果关系为假,则为0。

我对这个措辞感到困惑。例如,在逻辑表达式

x && y

没有关系可以是真是假。措辞不应该是:

  

根据定义,是关系或逻辑表达式的数值   如果表达式为真,则为1;如果表达式为假,则为0。

4 个答案:

答案 0 :(得分:1)

x && y

由于x和y与&&结合使用,编译器需要逻辑(布尔)值

在c 0中为false,而0为真。因此,您从标准中发布的声明逻辑表达式的计算结果为0或不为零(实际上为1,但在测试任何非零值时都会被视为true)。

因此,此代码被解释为

(x != 0) && (y != 0)

取决于x和y的当前值,这就是

1 && 0

这是

true && false

由0 == false和!0 == true的规则。因此,此表达式为false,因此根据您发布的参数计算结果为0。

请注意,大部分混淆来自于c最初没有布尔类型的事实。因此,惯例是0 =假和!0 =真。这具有有益的副作用,允许数字,特别是指针直接测试,如

while(ptr--)
{
}

相当于

while(ptr-- != 0)
{
}

答案 1 :(得分:0)

这不是关系运算符。(您也不应该在该上下文中使用单词关系)。这是合乎逻辑的。措辞是正确的。

此处变量的值xy中的每一个如果非零将评估为真值。如果它们都是真的那么它就是真的 - 整个表达都是真的。

这里通过 relation 来表示每个子表达式的关系是否真实,这反过来决定了整个表达式是真还是假。在您的情况下,关系只是 x是否为非零而且y是非零或

答案 2 :(得分:0)

关系或逻辑表达式是运算符的结果,例如&&||==,'> = {{ 1}}< = , x&& y`是一个逻辑表达式,将评估为0或1。

, etc. In this context,参数不一定是逻辑表达式。在布尔上下文中计算时,数值0的计算结果为false,而非零值的计算结果为true。因此,在&&的情况下,如果x && yx都不为零,则表达式将评估为1(即为真)。

答案 3 :(得分:0)

措辞是正确的。 Relation是一个数学术语。

C中返回布尔值的每个运算符都可以被认为是一种关系。