C语言中的真/假和0/1在不同的情境下具有不同的意义,清楚地对他们进行区别有助于正确理解程序,并巧妙地解决一些问题。
在逻辑表达式中,0表示假,非0表示真
(资料图)
int main(){ if (-1) { //执行 printf("hehe\n"); } if (0) { //不执行 printf("haha\n"); } return 0;}
在布尔类型中,true定义为 1,false 定义为0
C11:
The remaining three macros are suitable for use in #if preprocessing directives. Theyare
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
的定义:
#ifndef _STDBOOL#define _STDBOOL#define __bool_true_false_are_defined 1#ifndef __cplusplus#define bool _Bool#define false 0#define true 1#endif /* __cplusplus */#endif /* _STDBOOL */
关系表达式的返回值为 0 或 1,且具有int
类型
C99:
6Each 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这样的表达式的处理方法:
The expression a
问题:判断字符串是否合法,该字符串至少出现大写字母、小写字母和数字中的两种类型
可以将三种类型的元素出现个数分别计数,利用下面的表达式判断:
if((upper_count > 0) + (low_count > 0) + (digit_count > 0) >= 2){ //符合条件}