c语言中如何表示真和假:整数与布尔写法
c语言中如何表示真和假,核心规则只有一条:条件表达式里数值0代表假,任意非零数值代表真,语言早期版本没有独立的布尔关键字。这套规则同时作用于整数、浮点数和指针:整数0、浮点0.0、空指针NULL都判定为假,其余情况判定为真;逻辑运算符&&、||、!的运算结果是int类型,真固定为1,假固定为0。C99标准(ISO/IEC9899:1999)新增_Bool类型,并通过stdbool.h头文件提供bool、true、false三个别名,true展开为1,false展开为0。你也可以在工程里用define自定义TRUE、FALSE宏,但它属于约定而非语言内建,取值在不同项目里并不统一。该规则的适用边界是:C89及更早的K&R环境没有_Bool和stdbool.h,这类编译器上写bool、true、false会直接编译失败,只能退回整数写法。
c语言中真假的整型表示
整型条件判断只认0和非零。你写if(x)时,编译器等价于判断x!=0,x是1、2、-1都算真。浮点数同理,0.0和0.0f为假,任何非零浮点为真;指针里NULL为假,指向有效地址为真。
逻辑运算符的返回值被限制在0和1之间。&&在两侧都非零时返回1,否则返回0;||在任一侧非零时返回1,否则返回0;!把0翻成1、把非零翻成0,例如!0得1,!5得0。你用a=(x>y)这类写法得到的a一定是0或1,可以直接当真假值参与后续判断。
直接写if(x)比写if(x==1)稳妥。
有一类常见写法会出问题:有人在宏里把TRUE定义为-1,再用if(x==TRUE)判断,当x来自别处、取值为2这类非零数时,相等比较失败,条件被误判为假。条件判断应当写成if(x)或if(x!=0),让非零统一归入真,不要拿变量和某个字面真值做相等比较。
c语言中布尔类型怎么表示真假
C99标准(ISO/IEC9899:1999)正式引入_Bool类型,stdbool.h头文件把bool定义为_Bool,true定义为1,false定义为0。你在文件开头包含#include
使用布尔类型前先确认编译器支持范围。桌面GCC、Clang、现代MSVC默认按C99及以上编译,直接可用;部分传统嵌入式交叉编译器、老旧K&R环境没有stdbool.h,包含该头文件会报错,这类环境只能沿用整数0与非零的写法。
c语言中真假的三种表示方式对比
三种表示方式各有适用场景,选用前先看编译器环境和工程既有约定,对照下表逐项判断。
| 表示方式 | 取值规则 | 可读性 | 适用场景 |
|---|---|---|---|
| 整数0与非零(原生) | 0为假,一切非零为真 | 一般,需读者自行推断 | C89老环境,所有编译器通用 |
| bool、true、false(stdbool.h) | true为1,false为0 | 高,语义直接 | 支持C99及以上的新项目 |
| 自定义TRUE、FALSE宏 | 由工程自行定义,常见为1和0,也有定义为-1的写法 | 中等,依赖宏约定 | 维护已有宏约定的老工程 |
新项目优先采用stdbool.h的bool写法,变量语义一眼可读;维护老代码时沿用工程现有宏约定,不要在同一文件里混用两套真值写法。自定义宏要保持TRUE=1、FALSE=0,避免定义成-1,否则跨函数传递真值时相等比较容易出错。判断真假时只问变量是否为0,写成if(变量)即可,不要和字面量1做相等比较。
