原码、反码、补码详解

原码、反码、补码详解

  • 原码
    • 原码表示法
    • 优缺点
  • 反码
    • 反码表示法
    • 举例
  • 补码
    • 补码表示法
    • 补码就是负数在计算机中的二进制表示方法
    • 补码的定义
    • 补码转十进制
      • 正数
      • 负数

原码

原码表示法

用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。

优缺点

采用源码表示法简单易懂,即符号位加上二进制数的绝对值,但他最大的缺点就是加法运算复杂。

加法运算复杂,什么意思呢?

  • 如果是同号相加,则两数的数值相加。
  • 但如果是异号相加,则要进行减法,而在进行减法时
    1.首先还要比较绝对值的大小
    2.然后大数减去小数
    3.最后还要结合结果选择恰当的符号

反码

反码表示法

正数的反码还是等于原码
负数的反码就是他的原码是除符号位外,按位取反。

举例

(1)3是正数,反码与原码相同,则可以表示为0011
(2)-3的原码是1011,符号位的“1”保持不变,数值位(011)按位取反得(100,所以
-3的反码为1100

补码

补码表示法

正数的补码等于他的原码
负数的补码等于反码+1(这只是一种算补码的方法,只不过是补码正好就等于反码加1罢了)

补码还有另一种计算方法

负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。

以上两种方法只是补码的计算方法,而不是定义,不要误解为定义。

补码就是负数在计算机中的二进制表示方法

举个例子

例如:-5的二进制是啥呢?
5的二进制原码为:0000 0101
反码为:1111 1010
补码为:1111 1011(这就是-5在计算机中的表示方法

补码的定义

在《计算机组成原理》1中,以钟表为例说明补码概念。

假设现在的标准时间为4点,而有一只表已经7点了,为了校准时间可以采用两种方法:

  1. 将时针退7-4=3格
  2. 将时针向前拨12-3=9格

这两种方法都能对准到4点,由此可以看出,减三和加九是等价的。9和(-3)是对12的补码,可以用数学公式表示为:
            -3=+9   (mod 12)
mod 12的意思是12为模数,这个“模”表示被丢掉的数值。上式在数学上称为同余式

上例中的之所以7-3和==7+9(mod12)==等价,原因是钟表的指针超过12后,就将12自动丢掉了,最后得到16-12=4.同样地,以12为模时: 
                           -3=+9   (mod 12)
                           -3=+9   (mod 12)

从定义中我们可以得到一个结论,就是负数用补码表示时,可以把减法转化为加法。
通俗点说就是:加一个负数(减一个数)=加上这个数的补码(mod 模数)

补码转十进制

正数

一个数如果为正,则它的原码、反码、补码相同;一个正数的补码,将其转化为十进制,可以直接转换。

负数

负数就比较麻烦了,这里介绍两种方法:

方法一
          在这里插入图片描述

例如:(11111010)
=-27 * 1 + 26 * 1 + 25 * 1 + 24 * 1 + 23 * 1 + 22* 0 + 21 * 1 + 20 * 0
=-128+64+32+16+8+0+2+0
=-6

方法二:

1、先对各位取反;
2、将其转换为十进制数;
3、加上负号,再减去1。
例如:(11111010)

  • 首先最高位为1,是负数,先对各位取反得00000101
  • 转换为十进制数得5
  • 加上负号得-5,再减1得-6

  1. 《计算机组成原理》(第五版·立体化教材) 白中英、戴志涛主编 ↩︎

你可能感兴趣的:(Java,随笔,原码,反码,补码,机器码,二进制)