也许很多人都和我一样,不知道现在的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 1
  3. #define FALSE 0
  4. /* 第二种方法 */
  5. enum bool{false, true};

2. 使用_Bool

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

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

运行结果如下:(只有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. #ifndef _STDBOOL_H
  5. #define _STDBOOL_H
  6. #ifndef __cplusplus
  7. #define bool    _Bool
  8. #define true    1
  9. #define false   0
  10. #else /* __cplusplus ,应用于C++里,这里不用处理它*/
  11. /* Supporting <stdbool.h> in C++ is a GCC extension.  */
  12. #define _Bool   bool
  13. #define bool    bool
  14. #define false   false
  15. #define true    true
  16. #endif /* __cplusplus */
  17. /* Signal that all the definitions are present.  */
  18. #define __bool_true_false_are_defined   1
  19. #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 <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. /* 测试C99新添加的头文件 stdbool.h */
  5. int main(){
  6. bool m = true;
  7. bool n = false;
  8. printf("m==%d,  n==%d  /n", m, n);
  9. printf("sizeof(_Bool) == %d  /n", sizeof(_Bool));
  10. system("pause");
  11. return EXIT_SUCCESS;
  12. }

执行结果为:

  1. m==1,  n==0
  2. sizeof(_Bool) == 1

C语言的布尔类型(_Bool)的更多相关文章

  1. C语言讲义——C语言的布尔类型

    C89标准中没有定义布尔类型: C99中增加了_Bool类型.实际上是只能等于0或1的整数类型,凡是不为0的整数都被转变为1, C99还提供了一个头文件<stdbool.h>,该头文件提供 ...

  2. Objective-C 布尔类型&#160;和 class、SEL类型

    发现非常多刚開始学习的人无法区分bool和BOOL及class类型,今天闲来无事.写个博文做个区分 1. bool是C语言的布尔类型.有true和false,BOOL是Objective C 语言的布 ...

  3. kotlin之布尔类型

    var flag1 :Boolean = true val flag2 :Boolean = false if(flag1&&!flag2){ println("flag1& ...

  4. 【C语言】中的布尔类型

    C语言中的布尔类型 一.相关基础知识 首先bool  true  false为C++中的关键字,C语言中默认不支持这几个字符! 二.具体内容 在C89 (ANSI C)标准中没有定义与布尔类型相关的内 ...

  5. go语言 类型:布尔类型

    Go语言中的布尔类型与其他语言基本一致,关键字也为bool,可赋值为预定义的true和false示例代码如下: var v1 bool v1 = true v2 := (1 == 2) // v2也会 ...

  6. 简单易懂的程序语言入门小册子(3):基于文本替换的解释器,let表达式,布尔类型,if表达式

    let表达式 let表达式用来声明一个变量. 比如我们正在写一个模拟掷骰子游戏的程序. 一个骰子有6个面. 所以这个程序多次用到了6这个数字. 有一天,我们忽然改变主意,要玩12个面的骰子. 于是我们 ...

  7. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool。后面三种布尔类型是为了与其他语言兼容而引入的

    bool是LongBool类型. Delphi中定义了四种布尔类型:Boolean,ByteBool,WordBool和LongBool.后面三种布尔类型是为了与其他语言兼容而引入的,一般情况下建议使 ...

  8. 《你必须知道的495个C语言问题》读书笔记之第8-10章:字符串、布尔类型和预处理器

    一.字符和字符串 1. Q:为什么strcat(string, '!')不行? A:strcat()用于拼接字符串,所以应该写成strcat(string, "!")." ...

  9. C语言-逃逸字符、类型转换和布尔类型

    C语言-逃逸字符 逃逸字符是用来表达无法印出来的控制字符或者特殊字符,它由一个反斜杠""开头,后面跟上另一个字符,这两个字符合起来,组成一个字符. \b是backspace,在su ...

随机推荐

  1. mysql数据库索引类型和原理

    索引初识: 最普通的情况,是为出现在where子句的字段建一个索引.为方便讲述,我们先建立一个如下的表. CREATE TABLE mytable ( id serial primary key, c ...

  2. OLE:对象的类没有在注册数据库中注册

    我在网上下载了破解版的SAS9.3,用了一段时间之后,今天打开就填出一个提示框:OLE:对象的类没有在注册数据库中注册 激活该对象所需的应用程序不可用.是否用"转换--"将其转换为 ...

  3. find函数用法详解

    语法:find (string, sub3tring<, modifiers, startpos>),返回substring首次在string中出现的位置,若未找到,则返回0.其中:mod ...

  4. Docker常见仓库WordPress

    WordPress 基本信息 WordPress 是开源的 Blog 和内容管理系统框架,它基于 PhP 和 MySQL. 该仓库提供了 WordPress 4.0 版本的镜像. 使用方法 启动容器需 ...

  5. C语言完美体系

    **第 1 篇 C 语言第一阶段 13 1.1C 语言第一阶段--语言课程概述 13 1.1.1 什么是语言,什么是 C 语言 13 1.1.2 基本常识 14 1.1.3 人与计算机之间的更好的交互 ...

  6. R语言:安装及使用

    http://blog.csdn.net/pipisorry/article/details/53640638 ubuntu下安装 sudo apt-get install -y r-base源码安装 ...

  7. JS——2048(支持触屏及键盘操作)

    <html> <head> <title>2048</title> <style type="text/css"> ta ...

  8. J2EE进阶(十六)Hibernate 中getHibernateTemplate()方法使用

    J2EE进阶(十六)Hibernate 中getHibernateTemplate()方法使用   spring 中获得由spring所配置的hibernate的操作对象,然后利用此对象进行,保存,修 ...

  9. Hadoop 伪分布式安装、运行测试例子

    1. 配置linux系统环境 centos 6.4 下载地址:http://pan.baidu.com/s/1geoSWuv[VMWare专用CentOS.rar](安装打包好的VM压缩包) 并配置虚 ...

  10. SceneKit:简单的3D游戏场景搭建

    SceneKit是Apple用来开发休闲3D游戏的框架,不同于底层的OpenGL库,你仅仅需要很少的代码就可以快速看到实际的3D场景效果.下面简单的聊聊搭建一个3D游戏场景需要做的事情. 首先你必须用 ...