不同类型的变量与零究竟是如何比较(2)

简介: 不同类型的变量与零究竟是如何比较

4.float 变量与"零值"进行比较  

我们知道浮点数在内存中存储,可能会有精度损失(注:这里的损失,不是一味的减少了,还有可能增多,浮点数本身存储的时候,在计算不尽的时候,会“四舍五入”或者其他 策略)


q1.png


4.1两个浮点数是否可以进行相等比较

从下面的图片代码中可以看出 x=1.0,y=0.1,那么进行 if 表达式判断时 x - 0.9 应该等于 0.1 ,0.1与 y 相等应当打印 1,但却打印了 0 ,这是为什么了?


q2.png


那我们接下来,来看看打印 x-0.9 和 0.1 打印的究竟是什么?  


原来内存中 x - 0.9 并不等于 0.1,而是精度损失了,而 y 也不是0.1,也精度损失了,所以上面代码的才没有打印 1

q3.png



结论:因为精度损失问题,两个浮点数,绝对不能使用==进行相等比较


4.2那么两个浮点数该如何比较呢?

应该进行范围精度比较

q4.png



注:fabs是浮点数求绝对值


如何设置精度?


自己用宏定义设置

使用系统精度

1.自己用宏定义设置精度

w1.png



2.使用系统精度  

w2.png



4.3 float 变量与 0 比较

#include<stdio.h>
#include<float.h>
#include<math.h>
int main()
{
  float x = 0.000000000000001f;//当数值足够小时,会被判断为0
  //if (fabs(x) < DBL_EPSILON)
  if (fabs(x-0) < DBL_EPSILON)
  {
  printf("1\n");
  }
  else
  {
  printf("0\n");
  }
  return 0;
}

5.指针变量与“零值”进行比较

5.1表示0的方法

我们之前学习过 数字0、转义字符 \0、空 NULL,它们也都可以表示0

w3.png



我们可以转到NULL定义,可以看到其实NULL就是0

w4.png



5.2指针变量与零比较

e1.png


6.else 到底与哪个 if 配对呢?

1.这个代码总是让人感觉它与第一个 if 匹配,其实它跟第二个 if 匹配,因为 else 采取的是就近原则,所以这个代码什么也都不打印


#include<stdio.h>
int main()
{
  int x = 0;
  int y = 1;
  if (10 == x)
  if (11 == y)
    printf("hi\n");
  else
  printf("hello\n");
  return 0;
}

2.这个才是正确的代码风格,一看就知道 else 与哪个 if 匹配


#include<stdio.h>
int main()
{
  int x = 0;
  int y = 1;
  if (10 == x)
  {
  if (11 == y)
        {
            printf("hi\n");
        }
  } 
  else
  {
  printf("hello\n");
  }
  return 0;
}

为什么 不写成 x==10,而写成10 == x?


答:因为这样写可以避免把==写成=,如果不小心写成=,我们知道赋值号的左边必须是变量,所以这属于语法错误,编译器会提示,那要是不小心写成了 x = 10,这就属于运行错误系统不会提示。


由此可知良好的编程风格对编程者是多么重要,养成良好的编程习惯,从你我做起。  


相关文章
|
前端开发 JavaScript 算法
轻松实现数字格式化:JavaScript 中的千分位分隔技巧大揭秘
轻松实现数字格式化:JavaScript 中的千分位分隔技巧大揭秘
1593 0
|
JSON JavaScript 前端开发
【面试题】JS判断两个数组相等的4类方法
【面试题】JS判断两个数组相等的4类方法
1115 0
|
JavaScript 前端开发 Java
java的URLEncoder.encode() 疑问与解惑
本文是博主学习java的记录,希望对大家有所帮助。
713 0
java的URLEncoder.encode() 疑问与解惑
|
JavaScript
JS实现判断两个数的大小
JS实现判断两个数的大小
JS实现判断两个数的大小
|
14天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
5831 43
|
14天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
4948 58
|
8天前
|
Linux 开发工具 iOS开发
2026最新codex下载安装保姆级使用教程(下载+安装+登录+使用,含所有历史版本)
本文详解OpenAI Codex国内快速上手指南:提供Win/macOS/Linux全平台免安装包、npm/Homebrew等多方式安装、账号/API Key双登录、简体中文切换,覆盖下载、安装、汉化、使用及高频避坑(如微软商店失败、npm超时等),10分钟即可跑通。
2332 6
|
6天前
|
人工智能 安全 API
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(dsh)是DeepSeek AI于2026年开源的轻量级Agent运行框架,基于Cordis内核,践行“一切皆插件”理念。支持Web/桌面双端,开箱即用;内置多模型接入、丰富插件生态(超3.5万),适配编程、办公、创作等场景。(239字)
1438 0