博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言的布尔类型(_Bool)
阅读量:5012 次
发布时间:2019-06-12

本文共 2601 字,大约阅读时间需要 8 分钟。

[转,]

        也许很多人都和我一样,不知道现在的C语言已经有了布尔型:从C99标准开始,类型名字为“_Bool”。

        在此之前的C语言中,使用整型int来表示真假。在输入时:使用非零值表示真;零值表示假。在输出时:真的结果是1,假的结果是0;(这里我所说的“输入”,意思是:当在一个需要布尔值的地方,也就是其它类型转化为布尔类型时,比如 if 条件判断中的的条件;“输出”的意思是:程序的逻辑表达式返回的结果,也就是布尔类型转化为其他类型时,比如 a==b的返回结果,只有0和1两种可能)。

        所以,现在只要你的编译器支持C99(我使用的是Dev C++4.9.9.2),你就可以直接使用布尔型了。另外,C99为了让CC++兼容,增加了一个头文件stdbool.h。里面定义了booltruefalse,让我们可以像C++一样的定义布尔类型。

1. 我们自己定义的“仿布尔型”

        在C99标准被支持之前,我们常常自己模仿定义布尔型,方式有很多种,常见的有下面两种:

1 /* 第一种方法 */2 #define TRUE 13 #define FALSE 04 5 6 /* 第二种方法 */ 7 enum bool{
false, true};

2. 使用_Bool

        现在,我们可以简单的使用 _Bool 来定义布尔型变量。_Bool类型长度为1,只能取值范围为0或1。将任意非零值赋值给_Bool类型,都会先转换为1,表示。将零值赋值给_Bool类型,结果为0,表示。 下面是一个例子程序。

1 #include 
2 #include
3 4 int main(){ 5 _Bool a = 1; 6 _Bool b = 2; /* 使用非零值,b的值为1 */ 7 _Bool c = 0; 8 _Bool d = -1; /* 使用非零值,d的值为1 */ 9 10 printf("a==%d, /n", a);11 printf("b==%d, /n", b);12 printf("c==%d, /n", c);13 printf("d==%d, /n", d);14 15 printf("sizeof(_Bool) == %d /n", sizeof(_Bool));16 17 system("pause");18 return EXIT_SUCCESS;19 }

运行结果如下:(只有0和1两种取值)

1 a==1,2 b==1,3 c==0,4 d==1,5 sizeof(_Bool) == 1

 

3. 使用stdbool.h

        在C++中,通过bool来定义布尔变量,通过truefalse对布尔变量进行赋值。C99为了让我们能够写出与C++兼容的代码,添加了一个头文件<stdbool.h>。在gcc中,这个头文件的源码如下:(注,为了清楚,不重要的注释部分已经省略)

1 /* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. 2         This file is part of GCC. 3  */ 4  5 #ifndef _STDBOOL_H 6 #define _STDBOOL_H 7  8 #ifndef __cplusplus 9 10 #define bool    _Bool11 #define true    112 #define false    013 14 #else /* __cplusplus ,应用于C++里,这里不用处理它*/15 16 /* Supporting 
in C++ is a GCC extension. */17 #define _Bool bool18 #define bool bool19 #define false false20 #define true true21 22 #endif /* __cplusplus */23 24 /* Signal that all the definitions are present. */25 #define __bool_true_false_are_defined 126 27 #endif /* stdbool.h */

         可见,stdbool.h中定义了4个宏,bool、true、false、__bool_true_false_are_defined。 其中bool就是 _Bool类型,true和false的值为1和0,__bool_true_false_are_defined的值为1。 

下面是一个例子程序

1 #include 
2 #include
3 #include
4 5 /* 测试C99新添加的头文件 stdbool.h */ 6 7 int main(){ 8 bool m = true; 9 bool n = false;10 printf("m==%d, n==%d /n", m, n);11 12 printf("sizeof(_Bool) == %d /n", sizeof(_Bool));13 14 system("pause");15 return EXIT_SUCCESS;16 }

 

执行结果为:

1 m==1,  n==02 sizeof(_Bool) == 1

   

原文链接: 

转载于:https://www.cnblogs.com/gotodsp/articles/3630024.html

你可能感兴趣的文章
JavaPersistenceWithHibernate第二版笔记-第七章-005排序的集合(@org.hibernate.annotations.SortComparator)...
查看>>
ue4同c#通信时的中文乱码问题
查看>>
黄老师架构师课程笔记(二)
查看>>
mvc性能优化
查看>>
log
查看>>
663 如何做“低端”产品?(如何把低端做得高端 - 认同感)
查看>>
JDBC 第九课 —— 初次接触 JUnit
查看>>
Windows核心编程:第10章 同步设备IO与异步设备IO
查看>>
浏览器加载、解析、渲染的过程
查看>>
开放api接口签名验证
查看>>
sed 常用操作纪实
查看>>
C++复习:对C的拓展
查看>>
校外实习报告(九)
查看>>
android之android.intent.category.DEFAULT的用途和使用
查看>>
CAGradientLayer 透明渐变注意地方(原创)
查看>>
织梦DEDE多选项筛选_联动筛选功能的实现_二次开发
查看>>
iOS关于RunLoop和Timer
查看>>
SQL处理层次型数据的策略对比:Adjacency list vs. nested sets: MySQL【转载】
查看>>
已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。
查看>>
MySQL的随机数函数rand()的使用技巧
查看>>