【计算机组成原理】定点数和浮点数

简介: 一、概念1. 定点数1. 定点小数2. 定点整数3. 定点数表示的范围 2. 浮点数 1. 浮点数的表示形式 2. 浮点数的表示范围 3. 浮点数的规格化 二、重点1. 将十进制数转换为浮点数2. 将浮点数转换为十进制数

一、概念

1. 定点数

定点数表示法约定计算机中所有数据的小数点位置固定,其中,将小数点的位置固定在数据的最高位之前(或符号位之后)的数据表示称为定点小数,而将小数点固定在最低数位之后的数据表示称为定点整数。另外,由于小数点位置固定,因此小数点不必再用符号表示,其位置也无需存储。

1. 定点小数

设定点小数:x=X0.X1X2X3…Xn

① 符号位X0用来表示数的正负,小数点的位置是固定的,在计算机中不用去表示它。

② X1~Xn是数值的有效部分,也称尾数;X1为最高有效位。

③ 在计算机中定点小数主要用于表示浮点数的尾数,并没有高级语言数据类型与之对应。

2. 定点整数

设定点整数:x=X0X1X2…Xn

① 符号位X0用来表示正负。

② X1~Xn是数值的有效部分。

③ 小数点在Xn后面,可以省略掉。

3. 定点数表示的范围

定点数能表示的数据范围与下列因素有关:

① 机器字长。字长越长,其表示的数据范围就越大。

② 所采用的机器数表示方法。通过前面对几种不同机器数的分析可知,补码和移码表示所能表示的数据范围比原码和反码所能表示的数据范围要多一个数。

2. 浮点数

1. 浮点数的表示形式

① 浮点数中的小数点位置并不固定,也就是小数点位置可以浮动,这也是浮点数得名的原因。

② 为了扩大浮点数的表示范围和提高其表示精度,二进制浮点数表示采用了类似十进制科学记数法的表示方法,任意一个二进制数N都可以表示成如下形式:N=2^E*M

③ 采用这种方法,二进制浮点数可表示成阶码E和尾数M两部分,其中阶码E是定点整数,而尾数M是定点小数。阶码的位数决定数据的表示范围,阶码的位数越多,能表示的数据范围就越大,而阶码的值决定了小数点的位置;尾数的尾数决定数据表示的精度。阶码长度相同时,分配给尾数的数位越多,数据表示的精度就越高。

2. 浮点数的表示范围

① 显然当阶码为最大值,尾数为最大值时,浮点数为正数最大值;而当阶码为最小值,尾数为正数最小值时,浮点数为正数最小值,这个值也就是浮点数的最小精度。同理,当阶码为最大值,尾数为最小负数时,浮点数为负数最小值;而当阶码为最小值,尾数为负数最大值时,浮点数为负数最大值。

② 浮点数有效扩大了数据表示范围,但受计算机字长限制,浮点数仍然存在溢出现象。

3. 浮点数的规格化

① 同一浮点数可能存在多种表示形式,如0.011112^101还可以表示成0.111102^100。尾数小数点的位置不同,就会有不同的尾数和阶码组合,这将给浮点数的表示带来麻烦。为了使浮点数的表示形式唯一并进一步提高数据的表示精度,通常需要对浮点数进行规格化处理。

② 所谓规格化处理,就是使尾数真值最高有效位为1,也就是尾数的绝对值应大于等于0.1(二进制)或0.5(十进制)。

二、重点

1. 将十进制数转换为浮点数

例:将十进制数20.59375转换成IEEE754单精度浮点数的十六进制机器码

① 首先我们要分别将整数和小数部分转换成二进制数:

20的二进制为10100,0.59375的二进制为0.10011,所以20.59375的二进制表示为10100.10011

② 移动小数点,使尾数变成1.M的形式(规格化):

10100.10011=1.010010011*2^4

③ 分析得:

S=0,E=e+127=4+127=131=10000011,M=010010011

所以32位浮点数的二进制存储格式为:

0 1000 0011 010 0100 1100 0000 0000 0000
数符 阶码 尾数

④ 最终的机器码为:0100 0001 1010 0100 1100 0000 0000 0000

对应的十六进制为: 4 1 A 4 C 0 0 0

2. 将浮点数转换为十进制数

例:求IEEE754单精度十六进制浮点数(C1360000)对应的十进制

① 将十六进制数展开成二进制数为:1100 0001 0011 0110 0000 0000 0000 0000

② 从浮点数中分离出S、E、M:

S=1 符号位为:负

E=100 0001 0

M=011 011

③ 计算得:e=E-127=00000011=3(十进制)

实际尾数为:1.M=1.011011

移动小数点,实际尾数为:1011.01

④ 将其转换为十进制数:1011是11,0.011是0.375,所以十进制数为 -11.375。

目录
相关文章
|
运维 搜索推荐 数据安全/隐私保护
什么是C端 什么是B端 这里告诉你
C端产品早已将运营专业化,并细化到各维度的运营了,比如运营的工种可以细分为“活动运营岗、用户运营岗、增长裂变岗、内容运营岗”等等。
17408 0
什么是C端 什么是B端 这里告诉你
|
存储
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
8942 1
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
|
3月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
387 78
|
12月前
|
监控
DDN是什么,DDN专线的优势详解
数字数据网(DDN)是一种利用数字信道提供稳定、可靠的数据信号传输服务的网络。它支持点到点的数字传输,适用于大数据量、高实时性和强保密性的需求,如数据、图像和话音传输。DDN具有连接灵活、服务多样和技术成熟等优点,适合商业和金融等行业使用。与SDH和ISDN相比,DDN不具交换功能,但能提供更广泛的传输速率和更高的灵活性。
996 8
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
126619 0
|
Oracle Java 关系型数据库
jdk17安装全方位手把手安装教程 / 已有jdk8了,安装JDK17后如何配置环境变量 / 多个不同版本的JDK,如何配置环境变量?
本文提供了详细的JDK 17安装教程,包括下载、安装、配置环境变量的步骤,并解释了在已有其他版本JDK的情况下如何管理多个JDK环境。
21618 0
|
Ubuntu 安全 网络协议
|
Ubuntu Python
全网最简约的Vscode配置Anaconda环境(百分百成功)
全网最简约的Vscode配置Anaconda环境(百分百成功)
31410 0
全网最简约的Vscode配置Anaconda环境(百分百成功)