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


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


相关文章
|
Java Linux C++
性能工具之 C/C++ 分析工具 valgrind
【5月更文挑战第26天】性能工具之 C/C++ 分析工具 valgrind
233 2
性能工具之 C/C++ 分析工具 valgrind
|
11月前
|
前端开发 图形学
Pixi绘制带箭头的线
这篇文章讲解了如何使用Pixi.js来绘制带有箭头的线条,并提供了绘制箭头的具体实现方法和技术细节。
164 4
Pixi绘制带箭头的线
|
C语言 Python
一个高效的C语言命令行解析库
一个高效的C语言命令行解析库
879 0
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
解锁企业智能化的关键力量
【10月更文挑战第5天】随着人工智能(AI)技术的不断发展,大规模预训练模型正逐渐成为推动各行业智能化转型的核心动力。阿里云通义大模型作为阿里云推出的企业级AI解决方案,通过深度学习、自然语言处理(NLP)、计算机视觉(CV)等前沿技术,助力企业在多样化场景中实现创新和突破。本文将详细介绍阿里云通义大模型的技术原理、应用场景及其在企业智能化转型中的独特优势,帮助企业更好地理解和利用这一前沿技术。
217 10
|
关系型数据库 Linux 数据处理
深入了解Linux命令gprof:数据处理和分析利器
gprof是Linux下的一款命令行工具,用于分析程序性能,找出代码瓶颈。它通过分析函数调用和执行时间,提供函数级别的性能报告和图形化展示。使用gprof需在编译时添加`-pg`选项,然后运行程序并用gprof生成报告。注意覆盖所有执行路径,并可与其他性能工具结合使用,以优化代码性能。
|
存储 搜索推荐 安全
学生日常行为评分管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL(一)
学生日常行为评分管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
389 1
|
机器学习/深度学习 人工智能 算法
清华接手,YOLOv10问世:性能大幅提升,登上GitHub热榜
【6月更文挑战第6天】清华大学团队推出YOLOv10,实现目标检测性能大幅提升。该算法在效率和准确性间取得更好平衡,解决NMS后处理问题,优化模型架构,减少参数和FLOPs。YOLOv10在COCO基准测试中表现出色,虽有未在大规模数据集预训练及小规模模型性能差距的局限,但已成实时检测领域重要进展,引领未来研究方向。[链接](https://arxiv.org/pdf/2405.14458)
427 1
|
人工智能 安全 搜索推荐
智能家居的未来:从自动化到人工智能
本文探讨了智能家居技术的发展趋势,特别是如何从简单的家居自动化向集成人工智能的方向发展。我们将分析当前市场上流行的智能家居产品,并预测人工智能如何塑造家居生活的未来。通过实际案例研究,本文旨在揭示技术革新如何提高居家生活的效率、安全和舒适度。
|
Python
使用Python绘制彩虹效果:动态彩虹动画
使用Python绘制彩虹效果:动态彩虹动画
436 3
|
JavaScript 前端开发 API