图解计算机中的数值范围和浮点数运算

简介: 在【程序员进阶系列】专题的《图解计算机中数据的表示形式》一文中,我们详细的说明了在计算机中数据的表示形式。今天,我们继续来说计算机中的数值范围和浮点运算相关的知识。走起,继续,我们一起进阶,一起牛逼。

写在前面

在【程序员进阶系列】专题的《图解计算机中数据的表示形式》一文中,我们详细的说明了在计算机中数据的表示形式。今天,我们继续来说计算机中的数值范围和浮点运算相关的知识。走起,继续,我们一起进阶,一起牛逼。

文章已收录到:

https://github.com/sunshinelyz/technology-binghe

https://gitee.com/binghe001/technology-binghe

数值的表示范

在计算机中,码制所表示的范围,可以分为定点整数和定点小数。在定点数中,小数点是固定的。定点整数就是说小数点在最低位的后面,也就是在最右面,此时的小数点可以忽略不写。定点小数就是小数点在最高位的前面,也就是在最左边。

值得注意的是:在定点整数和定点小数中,小数点都不占位数。所以,小数点在定点整数和定点小数中不会影响数值的范围。

我们可以将定点整数和定点小数的取值范围总结成下表所示。

微信图片_20211120150648.jpg

表格中的n表示机器的字长,也就是用多少位二进制数表示。

这张表小伙伴们不用死记硬背,说白了,这张表,冰河也记不住,那我们怎么办呢?不慌,这里,我给大家举一个例子。

微信图片_20211120150655.jpg

例如,我们这里使用4位机器字长来表示,为了理解方便,这里我用四个方框来表示4位二进制数。

默认最高位为符号位,如下所示。

微信图片_20211120150704.jpg

这里我们先用4位二进制数表示定点整数,则最小值为1111,最大值为0111。

最小值1111表示如下。

微信图片_20211120150706.jpg

其转换成10进制数为-7。

最大值0111表示如下。

微信图片_20211120150723.jpg

其转换为10进制数为7。

这样,我们使用4位二进制数表示的范围,则可以计算出结果为:-7 ~ 7。也就是 -(2^4-1^ - 1)  ~ +(2^4-1^ -1),所以,当使用n位二进制数表示数值的范围时,我们可以得出数据的表示范围为:-(2^n-1^ - 1)  ~ +(2^n-1^ -1)

其中,2^4-1^ - 1表示2的4-1次方减1,也就是2的3次方减1,结果为7。

所以,我们根本就不需要记住定点整数和定点小数的取值范围表,只需要简单的使用一个实际的二进制位进行验算即可得出正确的结果数据。比如,我这里以4位二进制位进行验算举例。

还有一点需要注意的是:补码和移码比原码和反码少一个数,就是-0。另外,验证定点小数和验证定点整数的方式相同,小伙伴们可自行验证定点小数的值,这里,我就不再赘述。

如果我们使用8位二进制数表示,则定点整数的取值范围为:

1111 1111 ~ 0111 1111 转换为十进制数就是:-127 ~ 127,将二进制数转换为补码为:1000 0000 ~ 0111 1111。

其中,-128的补码为1000 0000是人为规定的。

如果使用8位二进制数表示,则定点小数的取值范围为:

-0.1111 1111 ~ +0.11111111,补码的范围为:-1~ + +0.11111111。

其中,-1的补码为1000 0000是人为规定的。

浮点数的运算

浮点数的表示

首先,我们先来看下浮点数的表示形式,浮点数的表示形式如下,

N = 尾数 * 基数^指数^

对于浮点数来说,我们最常说的就是圆周率 π,数学上常使用3.14来表示π的值,如果使用科学计算法的话,我们可以使用形如3.14 * 10^3^ 这样的数来表示。其中,在3.14 * 10^3^中,3.14表示尾数,10表示基数,3表示指数。

另外,3.14 * 10^3^ 可以写成多种形式,比如可以写成 0.314 *  10^4^,也可以写成0.0314 *  10^5^。

注:3.14 * 10^3^ 表示3.14乘以10的3次方。

浮点数的存储格式

浮点数在计算机中的表示中,阶码是带符号的纯整数,尾数为带符号的纯小数。浮点数的表示格式如下所示。

微信图片_20211120150731.jpg

一个数的浮点数表示不是唯一的。当小数点的位置发生改变时,阶码也会相应的改变。可以使用多个浮点形式表示同一个浮点数。浮点数的数值范围主要由阶码决定,数值的精度则是由尾数决定的。

浮点数的运算过程

运算的过程要依次经历对阶、尾数计算和结果格式化三个阶段。

例如计算:3.14 * 10^3^ + 1.5 * 10^5^的结果数据。

首先,我们需要先进行对阶操作,这里有个原则就是小数向大树看齐,这里我们需要将3.14 * 10^3^进行对阶操作,转化成0.0314 * 10^5^,然后与1.5 * 10^5^进行相加操作,得出结果数据1.5314 * 10^5^。

微信图片_20211120150737.jpg

接下来,我们再来看看浮点数的特点。

浮点数的特点

浮点数的主要特点如下所示。

  • 一般尾数使用补码表示,阶码使用移码表示。
  • 阶码的位数决定数的表示范围,位数越多范围越大。
  • 尾数的位数决定数的有效精度,位数越多精度越高。
  • 对阶时,小数向大数看齐。
  • 对阶是通过较小数的尾数右移实现的。
相关文章
|
机器学习/深度学习 人工智能 自然语言处理
Baichuan-Omni-1.5:百川智能开源全模态理解与生成模型,支持文本、图像、音频和视频的多模态输入和输出
Baichuan-Omni-1.5 是百川智能开源的全模态理解模型,支持文本、图像、音频和视频的多模态输入和输出,显著提升多模态交互体验。
1179 22
Baichuan-Omni-1.5:百川智能开源全模态理解与生成模型,支持文本、图像、音频和视频的多模态输入和输出
|
存储 JSON 数据库
Elasticsearch 分布式架构解析
【9月更文第2天】Elasticsearch 是一个分布式的搜索和分析引擎,以其高可扩展性和实时性著称。它基于 Lucene 开发,但提供了更高级别的抽象,使得开发者能够轻松地构建复杂的搜索应用。本文将深入探讨 Elasticsearch 的分布式存储和检索机制,解释其背后的原理及其优势。
892 6
|
人工智能 自然语言处理 API
阿里云百炼xWaytoAGI共学课DAY3 - 更热门的多模态交互案例带练,实操掌握AI应用开发
本文章旨在帮助读者了解并掌握大模型多模态技术的实际应用,特别是如何构建基于多模态的实用场景。文档通过几个具体的多模态应用场景,如拍立淘、探一下和诗歌相机,展示了这些技术在日常生活中的应用潜力。
3142 20
|
机器学习/深度学习 传感器 编解码
基于matlab实现16个调频脉冲信号的产生、脉冲压缩、MTI、MTD、CFAR等信号处理算法
基于matlab实现16个调频脉冲信号的产生、脉冲压缩、MTI、MTD、CFAR等信号处理算法
|
人工智能 JSON API
一张图读懂大模型应用是如何工作的,一图胜千言
用一张图,带你轻松读懂大模型应用的工作原理。不需要复杂的代码和艰深的理论,只需要一张图,就能让你对大模型有一个全新的认识
一张图读懂大模型应用是如何工作的,一图胜千言
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能对比
【5月更文挑战第4天】在移动开发的世界中,性能一直是衡量应用质量的重要指标。随着Kotlin的兴起,许多Android开发者开始考虑是否应该从传统的Java迁移到Kotlin。本文通过深入分析两者在Android平台上的性能差异,帮助开发者理解Kotlin在实际项目中的表现,并提供选择编程语言时的参考依据。
408 5
|
安全 应用服务中间件 网络安全
免费TLS--Let's Encrypt 使用说明
免费TLS--Let's Encrypt 使用说明
|
分布式计算 资源调度 Hadoop
Java大数据处理:Spark与Hadoop整合
Java大数据处理:Spark与Hadoop整合
|
调度 数据库 计算机视觉
并行和并发的区别(详细)
并行和并发的区别(详细)
|
Java Maven 数据安全/隐私保护
写给大忙人看的 - Java中图片压缩上传至MinIO服务器(4)
之前文章已经介绍了 MinIO 的环境搭建,已经对文件的上传下载方法,本篇文章一起与大家来学习图片压缩上传的方法
1964 1
写给大忙人看的 - Java中图片压缩上传至MinIO服务器(4)

热门文章

最新文章