C语言真假判断的理解
博客专区 > jockchou 的博客 > 博客详情
C语言真假判断的理解
jockchou 发表于3年前
C语言真假判断的理解
  • 发表于 3年前
  • 阅读 11
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 我们知道,C语言不像其他高级语言,它本身并没有定义boolean类型。它认为非0的值都为真,而只有0是假。也就是说C语言是通过判断整数值是否为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中的条件表达式的值必须是标量类型的。结构和数组这种复合类型是不允许出现在这里的。如果是函数调用,其返回值也必须是标量类型的。

共有 人打赏支持
粉丝 29
博文 38
码字总数 28900
作品 1
×
jockchou
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: