网站首页 > 资源文章 正文
定点小数的编码
用定点小数引出数值的三种编码(原码、补码和反码)方案是最方便的。
(1) 原码表示法
原码表示法是用机器数的最高一位代表符号,其余各位给出数值绝对值的表示方法。其定义为:
例如, X=+0.1011, [X]原=01011
X=-0.1011, [X]原=11011
按定义,当X=-0.1011时,[X]原= 1-X= 1.0000-(-0.1011) =11011,约定小数点在符号位和数值位之间,可省略,这里的X为数的真值,[X]原为原码表示的机器数,是符号位 + |X|。
在原码表示中,零有两种表示形式,即 [+0.0]原=00000, [-0.0]原=10000。
原码表示的优点在于实现乘除运算的规则简单,缺点是实现加减运算很不方便,要比较参与加减运算两个数的符号和两个数的绝对值的大小,才能确定运算结果的数值和符号。
(2) 反码表示法
反码表示法是用机器数的最高一位代表符号,数值位是对负数值各位取反的表示方法,其定义为
例如, X=+0.1011, [X]反=01011, X=-0.1011, [X]反=10100
在反码表示中,零有两个编码,即 [+0.0]反=00000 , [-0.0]反=11111
在当前的计算机系统中很少使用反码,在有些书中也称反码为按1取模的编码。
(3) 补码表示法
补码表示法是用机器数的最高一位代表符号,以下各位给出数值按2取模结果的表示方法,其定义为:
例如, X=+0.1011, [X]补=01011, X=-0.1011, [X]补=10101
在补码表示中,0有唯一的编码,即 [+0.0]补=X =00000, [-0.0]补=2 + X MOD 2 = 00000,所以定点小数多出一个编码,可表示-1。例如,X1=X2=-0.1000,则[X1]补=[X2]补 =11000, 那么[X+X]补=11000+11000=110000,按2取模后得10000,这是-1的补码表示。
补码表示的机器数和它的真值的关系,是 [X]补 = 2*符号位 + X,由此又得到 X=[X]补 - 2*符号位,这个结论在讨论补码乘法是会用到。
补码表示非常适合于进行加减法运算,对符号位与数值位同等处理,只要结果不超出机器能表示的数值范围,将直接得到正确的运算结果,即符号位与数值位都是正确的补码表示,并且可以用实现加法运算的电路完成减法运算,用 + [-Y]补 的办法处理减数即可
整数的编码
带符号的整数也可以用原码、补码和反码三种不同的编码方法表示。
可以认为整数是小数点被设置在最低一位数值位的右边,机器数的最高位仍被用作数的符号位。数值的表示范围,以及整数编码的取模值,都与表示一个数所用的二进制位数有关。
例如,对于用n+1个二进制位表示的带符号的整数的补码,其数值范围是-2n≤X <2n,是用机器数的最高一位代表符号,以下各位给出数值按2n+1取模结果的表示方法,其定义为:
正数的原码和反码的定义、表示与定点小数部分说明的方法类似,这里从略。
例如, X=+10101 [X]原 =[X]补 =[X]反 =010101
X=-10101 [X]原 =110101,[X]补 =101011,[X]反 =101010
以上两个数的变形补码分别为0010101和1101011。这里的n均为5。
二进制十进制数编码
有些计算机内有专门的十进制运算指令,支持选用十进制数的算术计算。为此要求采用一种二进制编码的十进制数来表示数据,这种编码被称为BCD码(Binary Coded Decimal),使用4位二进制编码来表示十进制数字0~9,有多种具体实现方案,如表2.3所示。
按照编码的每一位是否都有固定的权值,表中的编码可分为有权码和无权码两类。显然,8421码、2421码和5211码为有权码;而格雷码、余3码的每一位没有确定的权,所以是无权码。
格雷码又称循环码,其编码规则是使任何两个相邻的代码只有一个二进位的状态不同,在D/A或A/D转换电路中得到很好的运行结果。
用BCD码来表示十进制数字时,1个字节存放2位十进制的数字;符号位放在最低位数字位之后,一般用C(12)表示正号,用D(13)表示负号。例如:+258被表示成258CH,占用两个字节,-34被表示为034DH,也占用两个字节,此处的H指出用的是十六进制数。
猜你喜欢
- 2024-09-08 1.2 计算机内信息的表示与存储(计算机内部信息的表示及存储采用的是)
- 2024-09-08 C++手撕底层:位、字节、原码、反码、补码的深入理解
- 2024-09-08 算法水题练习(二)(算法题模板)
- 2024-09-08 二进制是怎么减法运算的?(二进制是怎么减法运算的原理)
- 2024-09-08 “原码、反码、补码”计算机如何更好的实现算法?
- 2024-09-08 PLC的加、减、乘、除指令有什么用?其实功能十分强大!
- 2024-09-08 【1682023】指令:NEG(088)—— 完成二进制求补的功能指令
- 2024-09-08 C语言-自运算、位运算、取反运算(c语言位运算的运算规则)
- 2024-09-08 软件设计(十三)-原码、反码、补码、移码
- 2024-09-08 原码、反码和补码:深度解析C语言中的二进制表示
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)