温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言中bool变量的示例分析

发布时间:2021-08-27 09:39:37 来源:亿速云 阅读:162 作者:小新 栏目:开发技术

小编给大家分享一下C语言中bool变量的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

前言

在一些高级语言当中,为了能够完成更好的逻辑判断,因此就有了bool类型,bool类型的变量值只有true和false两种。

而在C语言中,一般认为0为假,非0为真。

这是因为c99之前,c90是没有bool类型的的。但是c99引入了_Bool类型(_Bool就是一个类型,不过在新增头文件stdbool.h中,被重新用宏写成了 bool,为了保证C/C++兼容性)。

目前为止大部分C语言书籍采用的标准还是c90标准,因此我们很少用bool类型。

bool类型变量的大小

C语言中bool变量的示例分析

可以看到,这里的bool类型的大小和我们平时的真或假的大小是不一样的。

下面是bool类型的源码:

C语言中bool变量的示例分析

可见,stdbool.h中定义了4个宏,bool、true、false、__bool_true_false_are_defined。 其中bool就是 _Bool类型,true和false的值为1和0,__bool_true_false_are_defined的值为1。
注意这里的bool类型和char类型虽然都是1字节,但是它们是不同的:char 中存储字符,全局变量初始值为'\0',bool 中存0或1,全局变量默认初始化为0。

C语言中的逻辑表达式的返回结果,比如 a==b的返回结果,只有0和1两种可能,但是它们的大小确是4,也就是用整形表示真假:

C语言中bool变量的示例分析

另外,在VS2013中,微软还给我们设计了大写的BOOL类型,这个类型在VS2019中就被删除了,BOOL类型将int进行了重命名,因此它的大小是4个字节。不推荐这种类型,因为这是微软的标准,如果换到其他编译环境则无法使用。

bool 值与0比较

对于if条件的表达式,一般有以下三种写法:

#include <stdio.h> 
int main()
{
	int pass = 0; //0表示假,C90,我们习惯用int表示bool 
	if (pass == 0)
	{ 
		//理论上可行,但此时的pass是应该被当做bool看待的,
		//这里与整形数字0比较,这种表示方法在语义上并不直观,不推荐 
	}
	if (pass == false)
	{ 
		//不推荐,因为只能在C99中使用
	}
	if (pass)
	{ 
		//推荐 

	}
	return 0;
}

之所以推荐使用第三种,因为if语句在开始使用时先要进行条件判定,而判定的正是括号()中表达式或函数的逻辑结果,这个逻辑结果只有真或假。

在这里pass并没有进行任何条件判定,所以pass本身就是逻辑结果,这样就能反应出来flag是真或者假,这里pass的值是0表示假,如果想要其表示真只需要加逻辑反!即可:!pass

如果要采用bool类型:

#include <stdio.h> 
#include <stdbool.h>
int main()
{
    bool pass = false; //C99
	if (pass != 1)
	{ 
		//与整形数字0比较,这种表示方法在语义上并不直观,不推荐 
		//另外,非0为真,但是非0有多个,这里也不一定是完全正确的
	}
	if (pass != true)
	{ 
		//不推荐,这样写虽然没有问题,但是并不直观
	}
	if (!pass)
	{ 
		//推荐,pass本身表示假,取反表示真

	}
	return 0;
}

结论:bool类型,直接判定,不用操作符进行和特定值的比较。

c语言中bool如何输出

c中的bool型就是0和1,因此可以用%d输出,因此。。。代码如下:

#include <stdio.h>

void main()
{
bool b = true;
printf("%d\n",b);

bool c = false;
printf("%d\n",c);
}

以上是“C语言中bool变量的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI