概述
各语言的布尔值 和空值
C语言:
在C99出现之前,C语言是没有布尔类型的,只能使用宏定义定义
typedef enum{false=0, true=1} bool; //注意这里的false和true其实表示的是int类型
而在C99中定义了一个头文件stdbool.h
#define bool _Bool
#define true 1
#define false 0
对bool做了声明,此时它还是int类型。
C++语言:
bool类型实际上是C++引入的。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++会帮你做隐式转换。
BOOL值是宏定义,对应TRUE , FALSE. 1表示TRUE, 0表示FALSE。一般用0表示FALSE,非0表示真。
bool在C++是1个字节,而BOOL是int类型,大小视具体环境而定。
BOOL在windef.h中定义 typedef int BOOL;
Java语言,布尔类型关键字为boolean,对应true和false。1字节。
JavaScript 布尔(逻辑)只能有两个值:true 或 false。
var x=true
var y=false
javascript继承了java语言的特征,容易理解
objective-c语言,类似布尔类型关键字有2个,
一种是BOOL,对应YES和NO,这种是OC自己创造的。
一种是bool,对应true和false。这种是沿用的C99标准,因为OC是c的超集,自然支持C99。
在obj.h中,
typedef signed char BOOL;
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C"
// even if -funsigned-char is used.
#define OBJC_BOOL_DEFINED
#define YES (BOOL)1
#define NO (BOOL)0
在OC中,
BOOL 是一个Objective-C 类型,signed char;这里容易出现的一个问题,BOOL并非是一个真正的
布尔类型值,因为他有8位,如果一个数18,那它作为BOOL返回时是什么值呢,18:00010010,最末尾是0,返回NO。因此在OC中,使用BOOL变量时,记住只与YES和NO比较。
为什么OC的BOOL值与C的BOOL值不一样,(unsigned char 和int),是因为OC的BOOL值比C99出现早10年。
bool . You can use the (C99) bool type, Many of the C frameworks (CoreFoundation, CoreGraphics, etc.) use C99 bool. All of the Objective-C frameworks use BOOL
使用举例:
BOOL - YES/NO. bool - true/false.
See examples:
bool b1 = 2;
if (b1) printf("REAL b1 n");
if (b1 != true) printf("NOT REAL b1 n");
BOOL b2 = 2;
if (b2) printf("REAL b2 n"); //这里判断的是bool类型,非0值被判定为true。
if (b2 != YES) printf("NOT REAL b2 n");
//这里是BOOL类型值判定,最低位是0,不等于YES(1),因此结果也满足。
And result is
REAL b1
REAL b2
NOT REAL b2
Note that bool != BOOL. Result below is only ONCE AGAIN - REAL b2
b2 = b1; //b1是bool类型值,其值为true,1
if (b2) printf("ONCE AGAIN - REAL b2 n"); //下面判断是否为true,显然是true的。
if (b2 != true) printf("ONCE AGAIN - NOT REAL b2 n");
If you want to convert bool to BOOL you should use next code
BOOL b22 = b1 ? YES : NO; //and back - bool b11 = b2 ? true : false;
So, in our case:
BOOL b22 = b1 ? 2 : NO;
if (b22) printf("ONCE AGAIN MORE - REAL b22 n");
if (b22 != YES) printf("ONCE AGAIN MORE- NOT REAL b22 n");
And so.. what we get now? :-)
You could, instead of using the ternary operator use !!b1. To convert between them –
最后
以上就是奋斗学姐为你收集整理的4种语言布尔类型值的比较的全部内容,希望文章能够帮你解决4种语言布尔类型值的比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复