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之后,就可以写boolflag=true;并用if(flag)判断。_Bool类型有自身的归一规则:给它赋任何非零值,存储结果都变成1,赋0则变成0。

使用布尔类型前先确认编译器支持范围。桌面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做相等比较。

敬慕百科汇集百科知识与游戏文化,带你发现世界的每一个精彩角落。

想要了解更多关于c语言中如何表示真和假的文章欢迎访问:百科