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


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


相关文章
|
7月前
|
弹性计算 监控 网络协议
阿里云精品BGP线路EIP助力香港云服务器访问加速
香港云服务器因默认BGP线路问题常导致大陆访问延迟高、丢包严重。阿里云国际站推出精品BGP线路EIP,通过直连优化,实现低至80ms延迟、高稳定性跨境访问,助企业提升业务体验。
|
前端开发 图形学
Pixi绘制带箭头的线
这篇文章讲解了如何使用Pixi.js来绘制带有箭头的线条,并提供了绘制箭头的具体实现方法和技术细节。
306 4
Pixi绘制带箭头的线
|
小程序
企业人才招聘小程序模板源码
企业人才招聘小程序模板源码
304 3
|
机器学习/深度学习 人工智能 算法
清华接手,YOLOv10问世:性能大幅提升,登上GitHub热榜
【6月更文挑战第6天】清华大学团队推出YOLOv10,实现目标检测性能大幅提升。该算法在效率和准确性间取得更好平衡,解决NMS后处理问题,优化模型架构,减少参数和FLOPs。YOLOv10在COCO基准测试中表现出色,虽有未在大规模数据集预训练及小规模模型性能差距的局限,但已成实时检测领域重要进展,引领未来研究方向。[链接](https://arxiv.org/pdf/2405.14458)
548 1
|
JSON API 开发者
速卖通获得AliExpress商品详情API接口文章
速卖通(AliExpress)是阿里巴巴旗下的全球跨境电商平台,提供便捷的在线购物渠道。为帮助开发者和商家高效管理商品信息,速卖通提供了商品详情API接口。本文介绍如何使用aliexpress.item_get API获取商品详情,包括获取API密钥、调用API接口及处理响应数据,帮助用户提升商品管理和营销效率。注意API调用限制和合法合规使用。
|
监控 Java 测试技术
如何解读 jstat 工具输出的 G1 垃圾回收器性能数据?
如何解读 jstat 工具输出的 G1 垃圾回收器性能数据?
|
机器学习/深度学习 人工智能 安全
探索人工智能在网络安全中的创新应用
探索人工智能在网络安全中的创新应用
825 0
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--入门
Python数据分析篇--NumPy--入门
280 0
|
Python
使用Python绘制彩虹效果:动态彩虹动画
使用Python绘制彩虹效果:动态彩虹动画
754 3
|
网络协议 安全 物联网

热门文章

最新文章