if~else语句的执行过程及几个数据与零值比较时的注意事项

一、if~else语句的执行过程

if()语句到底是怎么执行的,你知道吗?很多人或许都会说if()语句不就是看()里面的语句是真还是假吗?为真就执行紧跟着if()后面的语句,为假就再判断后面的分支语句。其实不然,if~else语句的执行过程实际上是可以分为三步的。
一、先执行()中的表达式,得到真假逻辑结果。(无论什么情况都是优先算括号里面的表达式得到一个真假结果的)
二、进行条件判定功能,即判断得到的逻辑结果是真还是假。
三、进行分支功能,即如果逻辑结果为真就执行紧跟在if()后面的语句,否则就往下判断。
这里强调一点,很多人都忽略了if()语句的判定功能的,但其实判定功能是存在的,是先执行判定功能再执行分支功能的。

二、几个数据与零值比较的注意事项

1、bool与零值比较

在这里先问大家一个问题,C语言中存在布尔类型(true与false)吗?可能很多人在大多数C语言的书上是找不到布尔类型的,所以认为C语言是不存在布尔类型的,确实在C89和C90标准中确实不存在布尔类型,但是在最新的C99标准中C语言引入了_Bool的宏定义,即C99标准中是存在布尔类型的。因为书是落后于行业的,所以C语言书中没找到是很正常的。
下面我们就来聊聊bool和零值比较的注意事项。
在这里插入图片描述

2、float与零值比较

(1)浮点数在数据存储的时候有精度损失

我们先来看看一张图。
在这里插入图片描述
在这张图中你会发现,明明创建的double变量是3.6,但是打印出来的时候后面却多出来了一些小数,这是什么原因呢?这里是因为在数据存储发生了精度损失了(注意精度损失不一定是变小了的哦,也有可能变大了)。
我们再来看以下这张图。
在这里插入图片描述
按照常规来说打印出来的两个数应该是一样的,但是这样看来他们并不一样啊,所以这里也能证明数据存储是有精度损失的

(2)浮点数比较绝对不能用“==”

我们看:
在这里插入图片描述
这里按照正常来说肯定是打印you can see me的啊!但是通过现象可以看出结果并不是如你所愿的,通过以上可以得出一个很重要的结论就是:**浮点数在进行比较的时候,绝对不能直接使用==来进行比较的,因为浮点数的存储本身有精度损失,进而导致的各种结果可能有细微的差别,因为对于计算机的计算来说,即使是只有一点点的差别都是不一样的!!!(切记)。
**那我们该如何进行浮点数的比较呢?

(3)浮点数的比较需要用一个在误差范围内的区间比较

在这里插入图片描述
当然这个误差范围可以根据实际需要定义,也可以使用编译器自带的那换个误差范围值。
而我们要用x与零值比较,那么我们应该像下图这样写:
在这里插入图片描述

(4)要不要取“=”号细节

这里我们还需要再讨论一下一个很小的细节,那就是这里要不要写成fabs(x)<=ESP,就是说这里的等于号到底要不要取的问题,相信大家在很多的C语言的书中看到的写法都是带上=号的,但是真的要带上=号吗?我们看下图:

在这里插入图片描述

3、指针变量与零值比较

那么指针变量和零值比较又是以什么样的形式呢?
在这里插入图片描述
你学会了吗?评论区留下你的小心心和评论吧!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值