在K& R的“The C Programming Language”第42页的第2.6节“关系和逻辑运算符”中,作者说:
根据定义,是关系或逻辑表达式的数值 如果关系为真,则为1;如果关系为假,则为0。
我对这个措辞感到困惑。例如,在逻辑表达式
中x && y
没有关系可以是真是假。措辞不应该是:
根据定义,是关系或逻辑表达式的数值 如果表达式为真,则为1;如果表达式为假,则为0。
答案 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)
这不是关系运算符。(您也不应该在该上下文中使用单词关系)。这是合乎逻辑的。措辞是正确的。
此处变量的值x
和y
中的每一个如果非零将评估为真值。如果它们都是真的那么它就是真的 - 整个表达都是真的。
这里通过 relation 来表示每个子表达式的关系是否真实,这反过来决定了整个表达式是真还是假。在您的情况下,关系只是 x
是否为非零而且y
是非零或。
答案 2 :(得分:0)
关系或逻辑表达式是运算符的结果,例如&&
,||
,==
,'> = {{ 1}}< = ,
x&& y`是一个逻辑表达式,将评估为0或1。
, etc. In this context,
的参数不一定是逻辑表达式。在布尔上下文中计算时,数值0的计算结果为false,而非零值的计算结果为true。因此,在&&
的情况下,如果x && y
和x
都不为零,则表达式将评估为1(即为真)。
答案 3 :(得分:0)
措辞是正确的。 Relation是一个数学术语。
C中返回布尔值的每个运算符都可以被认为是一种关系。