比如在C语言中写7>1
,我能否期望结果将是确切的1,还是一些非零值?这个规则适用于所有布尔运算符吗?
比如在C语言中写7>1
,我能否期望结果将是确切的1,还是一些非零值?这个规则适用于所有布尔运算符吗?
<
,>
,<=
和>=
)规定如下:==
和!=
):&&
)稍微有所不同||
)int
,可能的值为0
和1
。(除非我错过了一些内容。)C语言在布尔运算符中遵循波斯特法则(Postel's Law):对自己所做的事情保守,对来自他人的事情宽容。在布尔表达式中,任何非零值都被视为真,但它总会产生0或1。例如2 != 3
始终为1
。
&&
) 和逻辑析取 (||
) 运算符也是如此。&
和 |
) 通常可以用作非短路版本逻辑运算符的原因。所有在C语言中产生逻辑真/假值的运算符都会返回一个类型为int
的结果,其中0
表示假,1
表示真。
但并非所有产生逻辑真/假值的表达式都是这样的。例如,在<ctype.h>
中声明的is*()
字符分类函数(如isdigit()
、isupper()
等)如果条件为假,则返回0
,但如果条件为真,则可能返回任何非零值。
只要您直接将结果用作条件:
if (isdigit(c)) ...
if (!isdigit(c)) ...
if (isdigit(c) || islower(c)) ...
不要试图将其与其他东西进行比较:
if (isdigit(c) == 1) ... /* WRONG */
if (isdigit(c) == true) ... /* ALSO WRONG */
这不应该引起任何问题。
(你可以安全地将结果与0
或false
进行比较,但没有充分的理由这样做;这就是!
运算符的作用。)
7>1
的结果是类型为int
且值为1
的变量。 - Keith Thompson