定点数的表示方法

article/2025/9/27 8:31:14

文章目录

  • 1.定点数的表示形式
  • 2.定点数的原码、反码与补码
  • 3.定点小数注意事项
  • 参考文献

计算机中数值的表示有两种形式,一是定点数(Fixed-point Number),二是浮点数(Floating-point Number)。

1.定点数的表示形式

定点数指小数点在数中位置固定不变的数。

定点数分为定点整数和定点小数,由于小数点位置固定不变,所以存储时小数点不进行存储,按照约定的位置计算数值。原理上讲,小数点的位置可以位于任何位置,但通常将定点数表示成纯小数或纯整数。

假设以机器字长 n 位表示定点数,从右至左,从低位到高位分别为 x1,x2,x3…xn-1,xn,其中 xn 取值 0 和 1 分别表示正号和负号。如此,对于任意一个定点数 x = x n x n − 1 . . . x 2 x 1 x = x_nx_{n-1}...x_2x_1 x=xnxn1...x2x1,在定点机器中可表示为:
这里写图片描述
如果 x 表示的是纯小数,那么小数点位于 x n x_n xn x n − 1 x_{n-1} xn1 之间,如果 x 表示的是纯整数,那么小数点位于 x1 的右边。

2.定点数的原码、反码与补码

定点数是我们日常生活中使用的数,比如十进制定点正整数 5 3 10 53_{10} 5310,二进制表示为 11010 1 2 110101_2 1101012,我们看不到小数点,但可以认为小数点在数值最后一位的后面,省略不写。二进制 11010 1 2 110101_2 1101012 即为 5 3 10 53_{10} 5310 原码。对于负整数的表示,由最高位符号位为 1 表示负数,假如使用 8 位来表示 − 5 3 10 -53_{10} 5310,那么 -53 的原码为 1011010 1 2 10110101_2 101101012。实际上,计算机对定点数的存储采用补码的形式,原码到补码的转换规则如下:

正数:原码=反码=补码
负数:
反码=原码符号位为1不变,其它位取反
补码=反码+1 

需要注意的是,定点小数的补码由反码加 1,这个“1”是加在小数部分的最后一位。

以 8 位为例,53 与 -53 的原码、反码与补码具体表示如下:

[53]原=[53]反=[53]补=00110101
[-53]原=10110101
[-53]反=11001010
[-53]补=11001011

负整数的补码与原码不同,为何计算机中负整数的补码计算规则采用上述方式呢?因为计算机为了便于运算,将减法变为加法,才将整数以补码的形式存储。以时钟为例,假设现在1点,时钟为4点,将时钟矫正有两种方式,一是将时针后退4-1=3格;二是将时针向前拨 12-3=9 格。由此可见,减3和加9是等价的,因为9是(-3)对12的补码,数学公式为:

-3=+9 (mod 12)

上式在数学上为同余式,mod 12 表示 12 是模数。以计算机中 32 bits 有符号整型数值为例,除去一个符号位,数值位共 31 位,那么模是2^31。

对于定点数,由补码转换为十进制数值的规则如下:

十进制数值=(-1)*符号位*位权+其它位*位权

根据上面的转换规则,正整数补码 0011010 1 2 00110101_2 001101012,转换为十进制数值过程如下:

=(-1)*0*27 + 1*2^5 + 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0
= 32 + 16 + 4 + 1
= 53

对于负整数 − 5 3 10 -53_{10} 5310 的补码 1100101 1 2 11001011_2 110010112 转为 − 5 3 10 -53_{10} 5310 的过程如下:

(-1)*1*2^7+1*2^6+0*2^5+0*2^4+1*2^3+0*2^2+1*2^1+1*2^0
=-128+64+8+2+1
=-53

当 53 除以 2 得到的结果是26.5,此时 26.5 为十进制定点小数,转换为二进制为 11010. 1 2 11010.1_2 11010.12。类似于定点二进制整数转换为十进制整数,根据每个比特位的位权,同样可以将定点二进制小数转换为十进制小数,转换过程如下:

= 1*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 + 1*2^-1
= 16 + 8 + 2 + 0.5
= 26.5

3.定点小数注意事项

对于定点小数的存储,实际上,计算机不存储小数点,但小数点的位置必须知道,不然计算机无法知道真实数值。

计算机作何知道小数点的位置呢?那么就需要有一个定点小数的规范。假设机器字长 8 bits,我们规定从左至右,第一位为符号位,接着后 5 位表示定点小数的整数部分,后两位表示定点小数的小数部分。那么 26. 5 10 26.5_{10} 26.510 的实际存储形式为 01101010。由于对定点小数并无统一的规范,且数值表示的范围和精度有限,所以普通计算机对于小数的表示采用浮点数形式,C/C++ 中也没有定点小数类型,一般使用单精度浮点数 float 和双精度浮点数 double 来表示小数。


参考文献

Introduction to Fixed Point Number Representation
计算机组成原理第四版.白中英


http://chatgpt.dhexx.cn/article/EhAgFvsc.shtml

相关文章

定点数(fixed-point number)的运算

定点数的运算 1. 定点数2. 定点数加减运算3. 定点数加减运算的溢出判断3.1 用一位符号位判断溢出3.2 用两位符号位判断溢出3.3 最高位和次高位判断溢出 4. 乘法运算4.1 分析笔算乘法4.2 笔算乘法的改进4.3 图示4.4 硬件配置4.5 表格示意图 5. 除法运算5.1 分析笔算除法5.2 笔算…

[计算机组成原理]2-4、定点数详解

定点数详解 看笔记一定要心静,慢慢来不急。 定点数解释为小数点固定的数。 我们平常使用的数字大部分都属于定点数。比如1.0;110;192.168等等。这么说可能我们对定点数还是没有什么概念,毕竟没有参照物,那么与定点数…

Java枚举类实现

一、枚举类的特点 1.类的对象只有有限个,且为静态常量 2.当需要定义一组常量时,强烈建议使用枚举类 二、如何定义枚举类 jdk1.5之前:自定义枚举类 jdk1.5 :可以使用enum关键字来定义枚举类 2.1自定义枚举类实现: package enumte…

java枚举

为什么需要枚举? 一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,比如成绩Grade只能为ABCDE。此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。枚举…

Java枚举中定义属性

文章目录 1、复习枚举2、自定义属性3、自定义属性枚举类和常量的对比4、常用方法5、枚举自定义属性在开发中的应用:字典表6、补充:入参校验 刚接触枚举时的例子太简单,就一个Season枚举类,里面四个常量值,后来开发中看…

Java 枚举(Enum)使用

文章目录 枚举引入enum关键字实现枚举enum关键字实现枚举注意事项enum常用方法一览表enum课堂练习enum实现接口 枚举引入 创建Season类, 实例化春夏秋冬四个实例 Season对象有如下特点 1.季节的值是有限的几个值(spring, summer, autumn, winter) 2.只读,不需要修…

Java枚举详解

目录 Java枚举详解 基本介绍 1.自定义类实现枚举 2.使用enum关键字实现枚举 使用enum关键字实现枚举的注意事项 enum的常用方法 enum的使用细节 Java枚举详解 基本介绍 枚举对应英文(enumeration,简写 enum) 枚举是一组常量的集合 枚举属于一种特殊的类,里…

Java枚举(enum)

枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为…

如何使用pFuzz以多种方法验证Web应用程序防火墙的安全性

关于pFuzz pFuzz是一款功能强大的Web应用程序防火墙安全检测/绕过工具,可以帮助广大研究人员同时通过多种方式绕过目标Web应用程序防火墙,以测试WAF的安全性。 pFuzz本质上是一款高级红队模糊测试工具,主要用于研究目的。pFuzz基于Python编…

jieba java_【NLP】【一】中文分词之jieba

声明:本文参考jieba官方文档而成,官方链接:https://github.com/fxsjy/jieba 【一】jieba安装 pip install jieba 【二】jieba简介 简介可见jieba官方说明:https://pypi.org/project/jieba/ 总而言之,jieba用于中文分词…

jieba 分词

一.介绍: jieba: “结巴”中文分词:做最好的 Python 中文分词组件 “Jieba” (Chinese for “to stutter”) Chinese text segmentation: built to be the best Python Chinese word segmentation module. 完整文档见 : GitHub: https://github.com…

jieba学习

Jieba jieba的安装主要功能1.主要有三种模式:2. 加载词典3.词性标注4.关键词提取5.Tokenize:返回词语在原文的起止位置 jieba的安装 先在 [http://pypi.python.org/pypi/jieba/]下载 ,解压后运行 python setup.py install 或者pin install j…

jieba 结巴分词详解

🔗 运行环境:python3🚩 作者:K同学啊🥇 精选专栏:《深度学习100例》🔥 推荐专栏:《新手入门深度学习》📚 极品专栏:《Matplotlib教程》📔 选自专栏…

NLP基本工具之jieba详解

jieba的作用只有分词吗? 简介 jieba(结巴)是百度工程师Sun Junyi开发的一个开源库,在GitHub上很受欢迎,使用频率也很高。 GitHub链接:https://github.com/fxsjy/jieba jieba最流行的应用是分词&#xff0…

jieba分词的最详细解读

目录 一,什么是jieba(结巴)库? 二,jieba库的使用规则 三,jieba库具体使用和实例 一,什么是jieba(结巴)库? 字如其名,结巴库主要用于中文分词&…

python中jieba库使用教程

jieba是python的一个中文分词库,下面介绍它的使用方法。 安装 方式1: pip install jieba方式2: 先下载 http://pypi.python.org/pypi/jieba/ 然后解压,运行 python setup.py install 功能 下面介绍下jieba的主要功能&#xff…

基于python中jieba包的详细使用介绍

一,jieba的介绍 jieba 是目前表现较为不错的 Python 中文分词组件,它主要有以下特性: 支持四种分词模式: 精确模式全模式搜索引擎模式paddle模式 支持繁体分词 支持自定义词典 MIT 授权协议 二,安装和使用 1&am…

CRC校验码的计算

循环冗余检验的原理: 在发送端,先把数据划分为组,假定每组k个比特,假定一个待传送的数据M(k位),CRC运算就是在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去&…

CRC校验简单记录

先聊聊奇偶校验 所谓通讯过程的校验是指在通讯数据后加上一些附加信息,通过这些附加信息来判断接收到的数据是否和发送出的数据相同。校验得通信双方都有才行,接收方收到数据后进行计算得到一个校验值,与发送方发的校验值比较,如果…

CRC校验总结

事实上网上很多CRC校验算法,在接收端进行CRC校验时,余数不为零。这往往是因为CRC校验算法本身是有问题的,但不妨碍我们进行校验。接收端可以对需要校验的字段带入CRC校验算法,计算得到校验值,并与发送数据中的校验值进…