文档章节

C语言真假判断的理解

jockchou
 jockchou
发布于 2015/06/10 19:16
字数 695
阅读 14
收藏 0
点赞 0
评论 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
粉丝 29
博文 38
码字总数 28900
作品 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语言编程学习运算符的优先级和结合性

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

小辰带你看世界
05/25
0
0
小蚂蚁学习C语言(6)——C语言运算符

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

嗜学如命的小蚂蚁
2015/12/02
74
0
小蚂蚁学习C语言(7)——C语言流程控制之if

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

嗜学如命的小蚂蚁
2015/12/03
46
0
C语言实现数据结构之栈的详解

在函数调用的过程中,需要的就是先进后出的特点,因此,栈就出现了。 栈是一种数据结构,是计算机怎么处理程序运行的一种方式。具有先进后出的特点,下面看的就是这些抽象的数据结构怎么用C...

ningcaichen66
2017/09/21
0
0
第四篇 从goto 说起

MVC的设计任务显然没有完成,不过为了更好的把后续工作做好,此处不得不插播一些其他内容。以拓宽我们对C的学习。 以下说两句鬼话,绝非属于正常教育学习路线: 1、本篇将介绍ARM的工具,利用...

中山野鬼
2012/10/27
3.2K
11
C语言新手入门学习经验分享,基础知识大汇总!

C语言是面向过程的,而C++是面向对象的 相信这么努力的你 已经置顶了我 学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后...

小辰带你看世界
01/05
0
0
简单理解与实验生成对抗网络GAN

之前 GAN网络是近两年深度学习领域的新秀,火的不行,本文旨在浅显理解传统GAN,分享学习心得。现有GAN网络大多数代码实现使用python、torch等语言,这里,后面用matlab搭建一个简单的GAN网络...

on2way
2017/05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
15分钟前
3
3
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0
Redis做分布式无锁CAS的问题

因为Redis本身是单线程的,具备原子性,所以可以用来做分布式无锁的操作,但会有一点小问题。 public interface OrderService { public String getOrderNo();} public class OrderRe...

算法之名
昨天
11
0
143. Reorder List - LeetCode

Question 143. Reorder List Solution 题目大意:给一个链表,将这个列表分成前后两部分,后半部分反转,再将这两分链表的节点交替连接成一个新的链表 思路 :先将链表分成前后两部分,将后部...

yysue
昨天
1
0
数据结构与算法1

第一个代码,描述一个被称为BankAccount的类,该类模拟了银行中的账户操作。程序建立了一个开户金额,显示金额,存款,取款并显示余额。 主要的知识点联系为类的含义,构造函数,公有和私有。...

沉迷于编程的小菜菜
昨天
1
0
从为什么别的队伍总比你的快说起

在机场候检排队的时候,大多数情况下,别的队伍都要比自己所在的队伍快,并常常懊悔当初怎么没去那个队。 其实,最快的队伍只能有一个,而排队之前并不知道那个队快。所以,如果有六个队伍你...

我是菜鸟我骄傲
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部