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

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

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

原码 用尾数表示真值的绝对值,符号位“0/1”对应“正/负”
计组——定点数原码反码补码移码以及它们之间的转换
文章图片

若机器字长n+1位,原码整数的表示范围: ? ( 2 n ? 1 ) ≤ x ≤ 2 n ? 1 {\color{Red} -(2^{n}-1)\leq x\leq 2^{n}-1} ?(2n?1)≤x≤2n?1(关于原点对称)
真值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}} ?(1?2?n)≤x≤1?2?n(关于原点对称)
真值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} ?(2n?1)≤x≤2n?1(关于原点对称)
若机器字长 n+1 位,反码小数的表示范围: ? ( 1 ? 2 ? n ) ≤ x ≤ 1 ? 2 ? n {\color{Red} -(1-2^{-n})\leq x\leq 1-2^{-n}} ?(1?2?n)≤x≤1?2?n(关于原点对称)
真值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} ?2n≤x≤2n?1(比原码多表示一个负数 ? 2 n {\color{Red}-2^{n}} ?2n)
若机器字长 n+1 位,补码小数的表示范围: ? 1 ≤ x ≤ 1 ? 2 ? n {\color{Red} -1\leq x\leq 1-2^{-n}} ?1≤x≤1?2?n(比原码多表示一个 ? 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
移码 在补码的基础上将符号位取反。注意:移码只能用于表示整数
移码的真值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} ?2n≤x≤2n?1(与补码相同)
移码的作用:移码很方便的用计算机硬件判断两个整数的大小
之后的浮点数的相关运算中会大量使用到移码
练习

  1. 定点整数x=50,用8位原码、反码、补码、移码表示
32 16 8 4 2 1
1 1 0 0 1 0
前面补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} ?(2n?1)≤x≤2n?1
小数表示范围: ? ( 1 ? 2 ? n ) ≤ x ≤ 1 ? 2 ? n {\color{Red} -(1-2^{-n})\leq x\leq 1-2^{-n}} ?(1?2?n)≤x≤1?2?n
补码:
整数表示范围: ? 2 n ≤ x ≤ 2 n ? 1 {\color{Red} -2^{n}\leq x\leq 2^n-1} ?2n≤x≤2n?1
小数表示范围: ? 1 ≤ x ≤ 1 ? 2 ? n {\color{Red} -1\leq x\leq 1-2^{-n}} ?1≤x≤1?2?n
移码:
整数表示范围: ? 2 n ≤ x ≤ 2 n ? 1 {\color{Red} -2^{n}\leq x\leq 2^n-1} ?2n≤x≤2n?1
移码全0真值最小,移码全1真值最大

    推荐阅读