C/C++中的“Boolean Data“

     学习和使用了几年C/C++, 对其中的某些细节一直都是认识的模模糊糊,尽管能在写代码时正确实现功能,但难免有时犯嘀咕:这样用会不会有问题?

    C/C++中的"Boolean Data“类型就是我一直觉得很模糊的部分。
   
    由于C语言的设计理念之一就是灵活,所以我在学习的时候,在布尔表达式这个问题上,也就采取了灵活的理解方式:”甭管输入的数据是什么类型,只有在值为0时才表示false,其他值均表示true。“

    这样的结果就是我对true/false,TRUE/FALSE,bool/BOOL这些概念的理解一直处于一种一知半解,经常混淆的状态。

    最近在看《The Art and Science of C》,决定利用这个机会,将类似的细节问题搞个清楚。

首先是C

    在C99标准之前,C中是不存在布尔类型的,通常是用int来当作布尔类型使用,但是一般不少人又觉得不够清晰,因此产生了五花八门的自定义布尔类型。

    C99中引入了标准的布尔类型"_Bool",其标准如下:

“    类型的名字为_Bool,值域为0和1。

    _Bool类型不能用signed, unsigned, short, long等修饰。“

    标准没有规定_Bool类型占用的大小。不过由于多数C编译器是和C++编译器一块供应
的,因此在实现了C99的编译器上,_Bool类型的大小跟C++编译器的bool一样。

    之所以用_Bool这个怪异的名字,是因为怕和以前用户已经定义自己的布尔类型的源代码
冲突。
   
    然而,_Bool这个符号实在难看又不好记,因此标准又规定了一个标准头文件<stdbool.h>
,对其规定如下:

“  要定义一个bool宏,展开后为_Bool
    要定义一个true宏,展开后为1
    要定义一个false宏,展开后为0
    要定义一个宏常量,名字叫__bool_true_false_are_defined,值为1,方便程序中用条件预处理检测之。“

    因此,只要包含该头文件,用户就可以在程序中用bool来声明布尔类型数据,并使用true/或false为其赋值。

    注意:C语言中的关键字中从未包含true 和false。

然后是C++

    C++一开始也没有bool类型,后来引入了bool类型。

    bool类型不能用signed, unsigned, short, long等修饰。

    bool类型的值只能为false和true,bool值作整数运算的时候,false转为0,true转为1。任何其他类型转为bool的时候,零转为false,非零转为true。
   

    布尔类型的引入给C和C++的逻辑运算带来了变化,在引入布尔类型之前,C和C++的逻辑运算的结果为整形,if,while等条件语句的条件也是整形;引入布尔类型之后都变成了布尔类型。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值