前言
C语言中的真/假和0/1在不同的情境下具有不同的意义,清楚地对他们进行区别有助于正确理解程序,并巧妙地解决一些问题。
在逻辑表达式中
在逻辑表达式中,0 表示假,非0 表示真
在布尔类型中
在布尔类型中,true定义为 1,false 定义为0
C11:
The remaining three macros are suitable for use in #if preprocessing directives. They are
true
which expands to the integer constant 1,
false
which expands to the integer constant 0, and
_ _bool_true_false_are_defined
which expands to the integer constant 1.
V.S.编译器stdbool.h
中对true
和false
的定义:
在关系表达式中
关系表达式的返回值为 0 或 1,且具有int
类型
C99:
6 Each of the operators < (less than), > (greater than), <= (less than or equal to), and >= (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is false.92) The result has type int.
标准中也给出了像a<b<c
这样的表达式的处理方法:
The expression a<b<c is not interpreted as in ordinary mathematics. As the syntax indicates, it means (a<b)<c; in other words, ''if a is less than b, compare 1 to c; otherwise, compare 0 to c''.
一个应用实例
问题:判断字符串是否合法,该字符串至少出现大写字母、小写字母和数字中的两种类型
可以将三种类型的元素出现个数分别计数,利用下面的表达式判断: