计算机原理-原码、补码、反码

2023-10-20 10:16:59 浏览数 (1)

简述

二进制数字表示法三兄弟:

  • 原码
  • 补码
  • 反码

原码就是原来的编码,就是字面意思,而补码和反码比较奇怪,为什么需要这两种编码,意义是什么?

原码

原码表示法,正数没有区别,负数首位为13的原码 0000 0011 -3的原码 1000 0011

这个就这么简单,没什么可说的。

补码

这个是操作系统在对负数进行计算时的一种策略。 作用:解决二进制下表示负数的问题。

为什么需要补码,是什么情况下需要使用到补码。不用行不行? 不行 因为使用两个原码做加法,没法运算!!

不用行不行? 不行,不用玩不了。因为两个原码在二进制下无法做加法!!

使用二进制的第一位表示数字的正负位: 0表示正数,1表示数。

原码加法

原码之间无法直接进行计算,举个反例

2 (-2) 结果应该是0,但是如果直接使用原码进行计算,结果溢出

代码语言:javascript复制
0000 0010
1000 0010
---------
1000 0100

结果 期望是: 0 实际为: -4

现在解释为什么需要补码

为了得到正确的计算结果!! 如何能得到正确的计算结果?

再举个例子,这次是正确的例子: 2 (-2) = 0 转换成二进制:

代码语言:javascript复制
0000 0010
???? ????
---------
0000 0000

结果 0

也就是说,第二行?是什么样的二进制,才能得到正确的结果,才是关键!!

反码

其实已经有了结果了,那可以从结果中求和?的结果。 要得到补码,就需要反码参与通过反码算出补码。

推导过程

还是:2 (-2)

代码语言:javascript复制
0000 0010
1111 1110        <-- 十进制(-2)在计算机中真正的表示形态,即,补码
---------
0000 0000  

负数计算补码步骤: 1.计算二进制的绝对值,即,该数除符号位之外的二进制有效数据位,符号位是要保留的。 2.按位取反 3. 1

1.计算二进制的绝对值 -2的绝对值,就是正2:

代码语言:javascript复制
1000 0010 # 最高位保留符号 1

2.取反

这个就是反码

代码语言:javascript复制
1111 1101        # 注意,上面说了,符号位是要保留的。

3.最后进行 1

代码语言:javascript复制
1111 1110

这个最终结果就是:补码

总结

有点繁索,但过程就是这么个过程,实际使用中无感知,但是必须了解这个原理,这也就是为什么 127 1=-128的由来。

代码语言:javascript复制
0111 1111
0000 0001
---------
1000 0000

0 人点赞