知识点一、C语言中有bool类型吗?

之前一直都没有注意到,最近在用C语言写DSP算法时,偶然间发现我函数中定义的bool类型的变量在VC6.0(我主要用它来检查一下语法错误)中编译居然报错了,说是bool类型没有定义。用了这么久的C和C++了,一直觉得bool这种基本类型,应该是C语言内置的类型,怎么会没有定义呢?事实证明,我的想法完全错误了。

有了网络,一切问题都变得那么容易了,我很容易地搜到了相关的解答。

C语言里面是没有bool(布尔)类型的,C++里面才有,这就是说,在C++里面使用bool类型是没有问题的。bool类型有只有两个值:true =1 、false=0。

但是,C99标准里面,又定义了bool类型变量。这时,只要引入头文件 ,就能在C语言里面正常使用bool类型。这点我在Fedora9下验证过了,它自带的编译器是 gcc 4.3.0,符合C99标准。但是在VC6.0中,会报找不到头文件 stdbool.h 的错误,看来VC6.0确实比较老了。

所以,为了兼容各种编译器,还是自己定义吧。^_^

#define bool char

#define ture 1

#define false 0

C99标准定义了一个新的关键字_Bool,提供了布尔类型。以前,C程序员总是使用自己的方法定义布尔类型。

0表示false,非0表示true。

可能使用char类型表示一个布尔类型,也可能使用int类型表示一个布尔类型。

很多函数库都定义了自己的布尔类型和相应的宏,枚举,typedef。

现在C99把C语言原生的布尔类型带来了。

#include

这个头文件定义了bool,true,false等宏。

#ifndef__cplusplus

如果不是C++,是纯C,那么,定义宏bool相当于_Bool类型。

#definebool _Bool

#definetrue 1

#definefalse 0

#else/* __cplusplus */

如果是C++,那么定义_Bool类型为bool类型。

/*Supporting in C++ is a GCC extension. */

#define_Bool bool

#definebool bool

#definefalse false

#definetrue true

#endif/* __cplusplus */

/*Signal that all the definitions are present. */

#define__bool_true_false_are_defined 1

看看上面这个宏是否==1,如果是,表示上面这些定义可用。

C2008草案中说:

Anobject declared as type _Boolis large enough to store the values 0 and1.

也就是说,只规定了_Bool类型的大小是至少能够存放0和1这两个值。并没有规定具体的大小。这交给编译器自由发挥了。

我用gcc做了一下测试:

printf("sizeof(bool):%d

",sizeof(bool));

printf("sizeof(char):%d

",sizeof(char));

printf("sizeof(int):%d

",sizeof(int));

printf("sizeof(long):%d

",sizeof(long));

--sizeof(bool):1

--sizeof(char):1

--sizeof(int):4

--sizeof(long):8

看来gcc是用char来实现_Bool类型的。

看看给_Bool类型赋值会怎样:

boolboolean=-11212112;

printf("boolean:%d

",boolean);

--boolean:1

看来,gcc编译器对待_Bool类型有自己的转换处理。如果是0赋值给_Bool类型,那么就赋值0。如果是任意其他数据,那么会赋值为1!(只是不知道其他编译器是否如此处理,C2008标准草案没有细说这个部分)

以前一直用!逻辑非运算符:

if(!flag){

}

来表示0和非0。现在_Bool类型就只有0和1这两个值!

知识点2、objective-c中的BOOL类型

1.objective-c中的 BOOL类型 实际上是一种带符号的字符类型(signed char)的定义(typedef),它使用8位存储空间。YES定义1,NO定义为0。

objective-c并不将BOOL类型作为仅能保存YES或NO的真正布尔类型来处理。编译器将BOOL认做一个8位二进制数,YES或NO只是一种约定。

如果不小心将一个长于1字节的整型值(例如short,int值)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。假设该低位字节刚好为0(例如8960,写成16进制为0x2300),

BOOL值将会是0,即NO值。

FALSE/TRUE与false/true的区别

1.FALSE/TRUE与false/true的区别:

false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define,这要用途

是解决程序在C与C++中环境的差异,以下是FALSE/TRUE在windef.h的定义:

#ifndef FALSE

#define FALSE 0

#endif

#ifndef TRUE

#define TRUE 1

#endif

也就是说FALSE/TRUE是int类型,而false/true是bool类型;所以两者不一样的,只不过

我们在使用中没有这种感觉,因为C++会帮你做隐式转换。

2.bool的大小与BOOL的区别:

bool在C++里是占用1字节,而BOOL是int类型,int类型的大小是视具体环境而定的;所以

来说:false/true只占用1个字节,而TRUE/FALSE视具体环境而言,以下是BOOL在windef

.h中的定义:typedef int BOOL;

3.NULL与0的区别:

还是让我们看一下windef.h中NULL的定义:

#ifndef NULL

#ifdef __cplusplus//这个是指示是用C++来编译程序

#define NULL 0

#else

#define NULL ((void *)0)

#endif

#endif

所以说:它们没有区别,只不过在C里面会做一个强制类型转换。

知识点三、bool和BOOL区别

一、

1、类型不同

BOOL为int型

bool为布尔型

2、长度不同

bool只有一个字节

BOOL长度视实际环境来定,一般可认为是4个字节

3、取值不同

bool取值false和true,是0和1的区别

BOOL取值FALSE和TRUE,是0和非0的区别

二:

bool是标准C++数据类型,可取值true和false。单独占一个字节,

如果数个bool对象列在一起,可能会各占一个bit,这取决于编译器。

BOOL是微软定义的typedef int BOOL。与bool不同,它是一个三值逻辑,

TRUE/FALSE/ERROR,返回值为>0的整数为TRUE,0为FALSE,-1为ERROR。

Win32 API中很多返回值为BOOL的函数都是三值逻辑。比如GetMessage().

三:

大BOOL和小bool之间的区别:

1、类型不同

BOOL为int型

bool为布尔型

2、长度不同

bool只有一个字节

BOOL长度视实际环境来定,一般可认为是4个字节

3、取值不同

bool取值false和true,是0和1的区别

BOOL取值FALSE和TRUE,是0和非0的区别

4、例子

bool x=3;  //告警

bool x=1;  //正确

BOOL x=3;  //正确

BOOL x=3.3;  //告警

注:windows为了兼容问题定义的基础变量。

typedef unsigned long        DWORD;

typedef int                  BOOL;

typedef unsigned char        BYTE;

typedef unsigned short      WORD;

typedef float                FLOAT;

typedef FLOAT                *PFLOAT;

typedef BOOL near            *PBOOL;

typedef BOOL far            *LPBOOL;

typedef BYTE near            *PBYTE;

typedef BYTE far            *LPBYTE;

typedef int near            *PINT;

typedef int far              *LPINT;

总结:关于这些布尔值之类的判断为真的情况很多,但是为假的情况一般就一种  值等于0的时候为假,所以在进行判断的时候我们可以把返回值是否为假作为判断条件。

C语言中整型和bool的转换,bool和BOOL类型知识集合相关推荐

  1. c语言整形符号位_C语言中整型无符号二进制数的表示问题

    龙源期刊网 http://www.qikan.com.cn C 语言中整型无符号二进制数的表示问题 作者:马红旭 来源:<电子技术与软件工程> 2015 年第 20 期 摘 要 文章解决的 ...

  2. C语言中字符型和字符串型的对比

    C语言中字符型和字符串型的对比 字符型:     C语言中字符用单引号括起来,存储方式以ASCII编码二进制形式存储,占用一个字节     如:'a','b','c','A'等     注意:在C语言 ...

  3. Gox语言中的基本数据类型及其转换-GX5.1

    Gox语言默认选用Qlang语法引擎,Qlang脚本语言又是基于Go语言(Golang)做了一定的改进,数据类型基本继承自Go语言,数据的赋值等操作也基本类似但略加改进和变化.一个主要的不同是,Gox ...

  4. python语言中整型对应的英文_Python基本数据类型详细介绍(转)

    1.空(None)表示该值是一个空对象,空值是Python里一个特殊的值,用None表示.None不能理解为0,因为0是有意义的,而None是一个特殊的空值. 2.布尔类型(Boolean) 在 Py ...

  5. C语言取整(含强制转换)

    目录 0 应用于 1 浮点数取整 1.1 强制转换 1.2 函数 1.2.1floor() 1.2.2 ceil() 1.2.3 rint() 1.2.4 round() 1.3 验证代码 1.4 总 ...

  6. c语言中数组的各元素必须具有相同的类型,2018年9月计算机二级C语言程序设计章节习题1...

    出国留学网在这里为考生们整理了"2018年9月计算机二级C语言程序设计章节习题",希望能帮到大家,想了解更多考试资讯,请关注小编的及时更新哦. 2018年9月计算机二级C语言程序设 ...

  7. python语言中整型对应的英文是什么-12.Python数值类型(整形、浮点型和复数)及其用法...

    实际开发中,我们经常需要使用数字记录游戏中用户的得分.游戏中角色的生命值.伤害值等信息,Python 语言提供了数值类型用于保存这些数值. 需要注意的是,Python 中这些数值类型都是不可改变的,也 ...

  8. C语言中字符型和浮点型能否相加,C语言中数据结构的基本类型(整型、浮点型和字符型)...

    #include int main() { /********************************************************** // 我们列出的是VS2008的内存 ...

  9. C语言中整型浮点型在计算机中的存储

    第一次写博客,遣词造句有点菜,算是一次简单梳理,慢慢学习人家的博客风格,随着学习的深入再做修改. 本次学习的是C语言在VS下的编译调试,对于初学者两说,首先说一下如何监控变量,以及监控变量在内存中的存 ...

最新文章

  1. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)
  2. Java中如何实现j并发更新数据库同一条数据
  3. PyQt5 技术篇-通过参数控制Dialog窗口增加?问号按钮
  4. PXC集群常见错误(一)
  5. Arthas - 开源 Java 诊断工具
  6. OneManager+CloudFlare Workers部署教程
  7. 杀掉僵尸 MapReduce 任务的两种方式
  8. 分布式数据库中间件概念
  9. Timer lock
  10. 马斯克与SEC再次达成和解协议 未被罚款也未被削权
  11. php球鞋,适合宽脚选手的球鞋有哪些“宽型脚”必备的实战利器推荐
  12. IE6 PNG透明终极解决方案
  13. AD PCB画图注意点
  14. 以锅炉安全为例,台账管理在安全建设中的作用
  15. 用MATLAB求系统状态方程,利用MATLAB求解系统的状态方程..doc
  16. 特殊句型之反义疑问句
  17. vlookup+left函数嵌套如何运用
  18. Hadoop与MPP
  19. 人工智能方向毕业设计_人工智能时代,理工科专业的毕业设计都被安排了
  20. html实现名字滚动年会抽奖(附源码)

热门文章

  1. 〖产品思维训练白宝书 - 产品思维认知篇⑥〗- 职场人所面临困惑与迷茫应该如何破局?
  2. Lumerical官方案例、FDTD时域有限差分法仿真学习(十五)——y分支的逆向设计(Inverse design of y-branch)
  3. 欧拉角与RPY与旋转矩阵的测试
  4. web界面 之 登录 (初稿)
  5. 三国志战略版:如何省出裸衣血战,暴力蜀枪的次级选择
  6. 国人九大劣根性-读书笔记
  7. 动量反转模型 Matlab code,量化选股策略——动量翻转模型
  8. 从零搭建个人博客(4)-留言评论区
  9. 2014年阿里巴巴校园招聘算法大题
  10. 沃舍尔算法_坐在马桶上看算法:只有五行的Floyd最短路算法