明晰C语言中的真/假和0/1

时间:2022-12-29 17:17:14

前言

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. 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.htruefalse​的定义:

#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:

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''.​


一个应用实例

问题:判断字符串是否合法,该字符串至少出现大写字母、小写字母和数字中的两种类型

可以将三种类型的元素出现个数分别计数,利用下面的表达式判断:

if((upper_count > 0) + (low_count > 0) + (digit_count > 0) >= 2)
{
//符合条件
}