计算机运算方法之(原码 补码 反码 移码)

无符号数

  • 表示范围:0-65535

有符号数

  • 表示范围: -32768~+32767
  • 正值:0
  • 负数:1

有符号数(小数)

小数:+0.1011表示:
01011 小数点位置在0.1011
小数:-0.1011表示:
1 1011小数点位置在1.1011

有符号数(整数)

+1100 表示:
01100小数点位置在01100.
-1100表示:
11100小数点位置在11100.

0+0=0 0-0=0 0*0=0
0+1=1 1-1=0 0*1=0
1+1=0 1-0=1 1*0=0
1+1+1=1 0-1=1 1*1=1

真值

  • 把带有"+“ “-”符号的数称为真值

机器数

  • 把符号数字化的数称为机器数

原码

原码又称为带符号的绝对值表示

  • 整数的符号位与数值位用(逗号)隔开
  • 小数的符号位与数值位用(小数点)隔开
  • 例子:
  • x=+1110时,原码【x】原=0,1110
  • x=-1110时,原码【x】原=1,1110
  • x=0.1101时,原码【x】原=0.1111
  • x=-0.1101时,原码【x】原=1.1101
  • 有原码求真值:
  • 原码【x】原=1.0011,得到 x=-0.0011
  • 原码【x】原=1,1100,得到 x=-1100
  • 原码【x】原=0.1101,得到 x=0.1101
    原码中的“零”有两种表示方式:
  • 【+0.0000】原=0.0000
  • 【-0.0000】原=1.0000

补码

只要确定了模,就可以找到一个与负数等价的正数(改正数就是负数的补数),这样就可以把减法运算用到加法实现

  • 正数相对于“模”的补数就是正数本身
  • +7 = +7 (mod 10)
  • 一个正数和一个负数互相为补数时,他们俩的绝对值和就是模数
  • -3 = +7 (mod 10)所以补数= |-3| + |7|=10
  • 例如:
  • x=+1010 【x】补=0,1010(正数补数为自身)
  • x=-1101 【x】补=1,0011 即(负数: 取反+1)
  • x=0.1001,【x】补=0.1001(正数补数为自身)
  • x=-0.0110,【x】补=1.1010(负数: 取反+1)

补码中的0只有一种表达方式:【+0】补=【-0】补=0.0000

已知补码求真值:
(注意先判断正负,负数取反,正数不改变)

  • [x]补=1.0101 x=-0.1011(原码除去符号位取反,再+1)
  • [x]补=1,1110 x=-0010(原码除去符号位取反,再+1)
  • [x]补=0.1101 x=0.1101(正数不改变)

反码

x为整数时:

  • x=+1101时,反码=0,1101(正数反码还是本身)
  • x=-1101时,反码=1,0010(负数反码,除符号位取反)

x为小数时:

  • x=+0.0110时,反码=0.0110
  • x=-0.0110时,反码=1.1101

反码中的0有两种表达方式:

  • 【+0.0000】反=0.0000
  • 【-0.0000】反=1.1111

移码

利用二进制数,比较十进制数21和-21的大小

x=21,对应的二进制数为+10101,【x】补=0,10101
x=-21,对应的二进制数为-10101,【x】补=1,01011
如果按照补码进行比较,则101011 > 010101,答案错误
x=10101 加上2的5次方 10101+100000=110101
x=-10101加上2的5次方 -10101+100000=001011
所以 110101>001011
移码: [x]移=2的n次方 + x

例如:

  • x=10100 则在【x】移=2*5+ x=100000+10100=1,10100
  • x=-10100 则在【x】移=2*5+ x=100000-10100=0,01100
  • 同一个真值的移码和补码仅相差一个符号位
  • x=-10100 则在【x】补=1,01100 【x】移=0,01100

你可能感兴趣的:(计算机组成原理)