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

简介: 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、指针变量与零值比较


那么指针变量和零值比较又是以什么样的形式呢?


相关文章
|
6月前
使用运算符来执行各种操作
使用运算符来执行各种操作
34 0
|
6月前
|
C++ 开发者
在C++语言中复合语句(块语句)
在C++语言中复合语句(块语句)
141 0
|
6月前
|
Python
python的else块(可选)在try块成功执行且没有引发异常时执行
【5月更文挑战第12天】python的else块(可选)在try块成功执行且没有引发异常时执行
57 1
|
5月前
|
存储 关系型数据库 MySQL
Mysql存储过程查询结果赋值到变量
Mysql存储过程查询结果赋值到变量
150 0
|
6月前
|
存储 SQL 关系型数据库
⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..
⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..
91 0
|
JavaScript 前端开发
使用语句 1 来初始化循环中所使用的的变量
使用语句 1 来初始化循环中所使用的的变量
60 0
一条语句,多个变量
一条语句,多个变量
77 0
witch语句中,x可以是哪些类型的数据
witch语句中,x可以是哪些类型的数据
witch语句中,x可以是哪些类型的数据
|
Java Shell Linux
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环
|
编译器 Scala 开发者
隐式函数使用注意事项|学习笔记
快速学习隐式函数使用注意事项。