文档章节

C语言真假判断的理解

jockchou
 jockchou
发布于 2015/06/10 19:16
字数 695
阅读 22
收藏 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语言编...

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

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

长平狐
2012/10/08
65
0
小蚂蚁学习C语言(6)——C语言运算符

运算符 算数运算符 + - / %(取余数) 关系运算符 > < >= <= != == 逻辑运算符 !(非) && (与) || (或) !真 就是假 !假 就是真 真&&真 真 真&&假 假 假&&假 假 真||假 真 假||真 真 真...

嗜学如命的小蚂蚁
2015/12/02
74
0
C语言编程学习运算符的优先级和结合性

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Beautiful Soup

定义 Python中的一个库,主要用于从网页爬取数据; 安装 pip install beautifulsoup4 四大对象 Beautiful Soup将复杂的HTML文档转换成树形结构,树中的每个节点都是Python对象,对象可归纳为...

村雨1943
31分钟前
3
0
Visual Studio 昨日发布新版本:增加实时同步编程、共同调试

多名开发者可以在同一个项目中编程,在编写代码和调试代码时只需发送一个 URL 网址,就能邀请他人参与协作,而且无需重新配置开发环境和安装任何附加包。该服务支持 Windows、Mac 与 Linux ...

linuxCool
34分钟前
2
0
发现一种不错的学习方法

这是在《软技能,代码之外的生存之道》所看到的一种学习方法,感觉这个理念不错,分享出来,共勉。 我的「十步学习法」 多年以来,我都承受着巨大的压力:快速学习新技术、新编程语言、新框架...

firepation
34分钟前
2
0
webpack4配置详解之常用插件分享

前言   继上一次webpack的基础配置分享之后,本次将分享一些工作中项目常用的配置插件、也会包含一些自己了解过觉得不错的插件,如有分析不到位的,欢迎纠错,嗯,这些东西文档都有,大佬可...

苏南-首席填坑官
51分钟前
11
1
升压变换器 Boost

工作特点 输入输出极性相同。 开关管 MOS 和负载构成并联,在MOS 导通时,电流通过 L 滤波,电源对 L 充电。 当 MOS 断开时,L 向负载及电源放电,输出电压将是 Ui+U L ,达到升压的目的。 ...

colinux
53分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部