计组——定点数原码反码补码移码以及它们之间的转换

在这里插入图片描述

在这里插入图片描述

原码

用尾数表示真值的绝对值,符号位“0/1”对应“正/负”
在这里插入图片描述
若机器字长n+1位,原码整数的表示范围: − ( 2 n − 1 ) ≤ x ≤ 2 n − 1 {\color{Red} -(2^{n}-1)\leq x\leq 2^{n}-1} (2n1)x2n1(关于原点对称)
真值0有 + 0 {\color{Red} +0} +0 − 0 {\color{Red} -0} 0 两种形式
在这里插入图片描述
若机器字长 n+1 位,原码小数的表示范围: − ( 1 − 2 − n ) ≤ x ≤ 1 − 2 − n {\color{Red} -(1-2^{-n})\leq x\leq 1-2^{-n}} (12n)x12n(关于原点对称)

真值0有 + 0 {\color{Red} +0} +0 − 0 {\color{Red} -0} 0 两种形式

反码

若符号位为0,则反码与原码相同
若符号位为1,则数值位全部取反

若机器字长 n+1 位,反码整数的表示范围: − ( 2 n − 1 ) ≤ x ≤ 2 n − 1 {\color{Red} -(2^{n}-1)\leq x\leq 2^{n}-1} (2n1)x2n1(关于原点对称)
若机器字长 n+1 位,反码小数的表示范围: − ( 1 − 2 − n ) ≤ x ≤ 1 − 2 − n {\color{Red} -(1-2^{-n})\leq x\leq 1-2^{-n}} (12n)x12n(关于原点对称)

真值0有 + 0 {\color{Red} +0} +0 − 0 {\color{Red} -0} 0 两种形式
[ + 0 ] 原 = 0 , 0000000 [+0]_{原}=0,0000000 [+0]=0,0000000 [ − 0 ] 原 = 1 , 0000000 [-0]_{原}=1,0000000 [0]=1,0000000
[ + 0 ] 反 = 0 , 0000000 [+0]_{反}=0,0000000 [+0]=0,0000000 [ − 0 ] 反 = 1 , 1111111 [-0]_{反}=1,1111111 [0]=1,1111111

补码

正数的补码=原码
负数的补码=反码末尾+1(要考虑进位)

若机器字长 n+1 位,补码整数的表示范围: − 2 n ≤ x ≤ 2 n − 1 {\color{Red} -2^{n}\leq x\leq 2^n-1} 2nx2n1(比原码多表示一个负数 − 2 n {\color{Red}-2^{n}} 2n
若机器字长 n+1 位,补码小数的表示范围: − 1 ≤ x ≤ 1 − 2 − n {\color{Red} -1\leq x\leq 1-2^{-n}} 1x12n(比原码多表示一个 − 1 {\color{Red}-1} 1

补码的作用:让减法操作转变为等价的加法操作,节省硬件成本,ALU中无需集成减法器,执行加减法时,符号位一起参与运算

注意:补码的真值0只有一种表示形式

定点整数补码 [ x ] 补 = 1 , 0000000 [x]_{补}=1,0000000 [x]=1,0000000 表示 x = − 2 7 {\color{Red} x=-2^{7}} x=27

整数的原码和补码之间的相互转换都是数值位取反,末尾加1

定点小数补码 [ x ] 补 = 1 , 0000000 [x]_{补}=1,0000000 [x]=1,0000000 表示 x = − 1 {\color{Red} x=-1} x=1

小数的原码和补码之间的相互转换都是尾数取反,末尾加1

移码

在补码的基础上将符号位取反。注意:移码只能用于表示整数
移码的计算:移码=真值+偏置值

比如8位移码的偏置值=1000 0000B,即就是 2 n − 1 2^{n-1} 2n1
——————
-127
原码=1111 1111B
真值=-111 1111
移码=-111 1111B+1000 0000=0000 0001
——————
+127
原码=0111 1111B
真值=0111 1111
移码=0111 1111+1000 0000=1111 1111

移码的真值0只有一种表示形式: [ + 0 ] 移 = [ − 0 ] 移 = 1 , 0000000 [+0]_{移}=[-0]_{移}=1,0000000 [+0]=[0]=1,0000000
若机器字长 n+1 位,移码整数的表示范围: − 2 n ≤ x ≤ 2 n − 1 {\color{Red} -2^{n}\leq x\leq 2^n-1} 2nx2n1(与补码相同)

移码的作用:移码很方便的用计算机硬件判断两个整数的大小
之后的浮点数的相关运算中会大量使用到移码

练习

  1. 定点整数x=50,用8位原码、反码、补码、移码表示
32168421
110010

前面补0,凑足8位,其中第一位为符号位
[ x ] 原 = [ x ] 反 = [ x ] 补 = 0 0110010 [x]_{原}=[x]_{反}=[x]_{补}={\color{Red} 0}0110010 [x]=[x]=[x]=00110010
[ x ] 移 = 1 0110010 [x]_{移}={\color{Red} 1}0110010 [x]=10110010 (补码的符号位由1变为0)

  1. 定点整数x=-100,用8位原码、反码、补码、移码表示

在这里插入图片描述

【解析】
[ x ] 原 = 1 1100100 [x]_{原}={\color{Red} 1}1100100 [x]=11100100
[ x ] 反 = 1 0011011 [x]_{反}={\color{Red} 1}0011011 [x]=10011011(原码数值位取反)
[ x ] 补 = 1 0011100 [x]_{补}={\color{Red} 1}0011100 [x]=10011100(补码数值位加1)
[ x ] 移 = 0 0011100 [x]_{移}={\color{Red} 0}0011100 [x]=00011100(补码的符号位由1变为0)

  1. 求下列各种码对应的真值
    [ x ] 原 = 1 0001101 [x]_{原}={\color{Red} 1}0001101 [x]=10001101 【-(1+4+8)=-13】
    [ x ] 反 = 1 0001101 [x]_{反}={\color{Red} 1}0001101 [x]=10001101 [ x ] 原 = 1 1110010 [x]_{原}={\color{Red} 1}1110010 [x]=11110010,-(2+16+32+64)=-114】
    [ x ] 补 = 1 0001101 [x]_{补}={\color{Red} 1}0001101 [x]=10001101 [ x ] 原 = 1 1110011 [x]_{原}={\color{Red} 1}1110011 [x]=11110011, -115】
    [ x ] 移 = 1 0001101 [x]_{移}={\color{Red} 1}0001101 [x]=10001101 [ x ] 补 = 0 00001101 [x]_{补}={\color{Red} 0}00001101 [x]=000001101= [ x ] 原 [x]_{原} [x](正数的原码等于补码), +13】
    【解析】
    [ x ] 原 = 0 0001101 [x]_{原}={\color{Red} 0}0001101 [x]=00001101 【+(1+4+8)=+13】
    [ x ] 反 = 0 0001101 [x]_{反}={\color{Red} 0}0001101 [x]=00001101 【+13】
    [ x ] 补 = 0 0001101 [x]_{补}={\color{Red} 0}0001101 [x]=00001101 【+13】
    [ x ] 移 = 0 0001101 [x]_{移}={\color{Red} 0}0001101 [x]=00001101 [ x ] 补 = 1 0001101 [x]_{补}={\color{Red} 1}0001101 [x]=10001101 [ x ] 原 = 1 1110011 [x]_{原}={\color{Red} 1}1110011 [x]=11110011, -(1+2+16+32+64)=-115】

补充:由 [ x ] 补 [x]_{补} [x]快速求 [ − x ] 补 [-x]_{补} [x]的方法

符号位、数值位全部取反,末位+1

总结

在这里插入图片描述
原码和反码的真值0有两种表示;
补码和移码的真值0只有一种表示。

若机器字长为n+1位,则:
原码和反码:
整数表示范围: − ( 2 n − 1 ) ≤ x ≤ 2 n − 1 {\color{Red} -(2^{n}-1)\leq x\leq 2^{n}-1} (2n1)x2n1
小数表示范围: − ( 1 − 2 − n ) ≤ x ≤ 1 − 2 − n {\color{Red} -(1-2^{-n})\leq x\leq 1-2^{-n}} (12n)x12n

补码:
整数表示范围: − 2 n ≤ x ≤ 2 n − 1 {\color{Red} -2^{n}\leq x\leq 2^n-1} 2nx2n1
小数表示范围: − 1 ≤ x ≤ 1 − 2 − n {\color{Red} -1\leq x\leq 1-2^{-n}} 1x12n

移码:
整数表示范围: − 2 n ≤ x ≤ 2 n − 1 {\color{Red} -2^{n}\leq x\leq 2^n-1} 2nx2n1
移码全0真值最小,移码全1真值最大

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值