文档章节

C语言真假判断的理解

jockchou
 jockchou
发布于 2015/06/10 19:16
字数 695
阅读 26
收藏 0

C语言真假判断的理解


我们知道,C语言不像其他高级语言,它本身并没有定义boolean类型。它认为非0的值都为真,而只有0是假。也就是说C语言是通过判断整数值是否为0来进来逻辑控制的。

C99定义了_Bool类型来表示布尔。我们先来看一个关于_Bool类型的例子:

#include<stdio.h>

int main(void) {
	
	_Bool a = -8;
	_Bool b = 10L;
	_Bool c = 0;
	_Bool d = 0.0;
	_Bool e = 121.45;
	_Bool f = 'c';
	_Bool g = "world";
	_Bool h = '\0';
	_Bool i = NULL;
	
	printf("sizeof(_Bool) = %d\n", sizeof(_Bool));
	
	printf("a->%d\n", a);
	printf("b->%d\n", b);
	printf("c->%d\n", c);
	printf("d->%d\n", d);
	printf("e->%d\n", e);
	printf("f->%d\n", f);
	printf("g->%d\n", g);
	printf("h->%d\n", h);
	printf("i->%d\n", i);
	
	return 0;
}

输出结果:

sizeof(_Bool) = 1
a->1
b->1
c->0
d->0
e->1
f->1
g->1
h->0
i->0

从输出结果来看,gcc实现中,_Bool类型占一个字节大小,可以使用标量类型对_Bool变量赋值,但结果都会转化成0或者1,非0都转化成1。理所当然,空字符和空指针都转化成0。这种设计能够很好兼容以前的C版本。再来看一个例子:

#include<stdio.h>

int main(void) {
	
	int true_val, false_val;
	
	true_val = (10 > 2);   //一个真值表达式的值
	false_val = (10 == 2); //一个假值表达式的值
	
	printf("true = %d\nfalse = %d\n", true_val, false_val);
	
	return 0;
}

输出结果:

true = 1
false = 0

正如你所料,在C语言中,条件表达式的值只有0和1两个。实际上,只要是非0的表达式在C中都认为是真,只有值为0的表达式才为假。我们知道,在C语言中有各种表达式,这些表达式通常具有一个值。在进行真假判断的时候,系统首先将表达式的值转化为整型,再确定是否值为0。这个过程类似于_Bool类型变量赋值的过程。当然,只有标量类型可以进行此操作。什么是标量类型呢?根据C语言规范定义,只有整型,浮点数以及指针类型才是标量类型。

从这上面的分析可以理解到,if,while中的条件表达式的值必须是标量类型的。结构和数组这种复合类型是不允许出现在这里的。如果是函数调用,其返回值也必须是标量类型的。

© 著作权归作者所有

共有 人打赏支持
jockchou
粉丝 28
博文 39
码字总数 29164
作品 1
深圳
高级程序员
私信 提问
关系运算符

条件判断 这种情况的话可以使用条件语句来完成,但是我们暂时不学习条件语句,先来看一些更基础的知识:如何判断一个条件成不成立。 真假 在C语言中,条件成立称为“真”,条件不成立称为“假...

5vinsEnt
2016/03/14
6
0
shell 编程if条件判断与if 真假判断

if条件判断与if真假判断 目录: 1.正确写法 2.错误写法 3.总结 一、正确写法 在编写shell脚本时,为简化代码的行号及结构的简约型,通常将命令执行结果和判断通过一条语句进行编写(在C语言编...

心的哲学
2018/07/02
0
0
PHP学习之初:基本语法

为什么要学习PHP? 前段时间一直在学习android应用程序的开发,随着学习的深入,逐渐在android平台上搭建图像处理的系统。但是,我很快就发现了一个重要的问题。android操作系统一般都运行在...

长平狐
2012/10/08
66
0
T-GANs:基于“图灵测试”的生成对抗模型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/83747888 在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后...

Paper_weekly
2018/11/05
0
0
小蚂蚁学习C语言(7)——C语言流程控制之if

其实我感觉只要学过一门编程语言的人都会使用。 流程控制(非常重要) 1,什么流程控制 控制程序的执行顺序 流程控制的重要性 一通百通 C++ java C+ 都是一样的。 等等……总之就是非常的重要...

嗜学如命的小蚂蚁
2015/12/03
46
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 以后我偷小鱼干养你

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @庞巴哥 :只有这节奏瞬间变得轻松。。。。。。。。。分享Talking Eyes的单曲《In the sun (Extended Version)》: 《In the sun (Extended Ve...

小小编辑
17分钟前
0
0
多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
7
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
7
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
8
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部