原码、反码、补码小结

0. 摘要:

原码(True form)是电脑运算名词,是指未经更改的码(一般指二进制码)。为了便于ALU(Arithmetic logic unit)的设计,又发展出一补码(ones' complement,即反码)、二补码(two's complement)等转换过的码。

1. 原码:

  • 定义:从一个软件新手角度来看,可以认为“原码即正数的二进制码”。
  • 其它:由于用原码表示十进制数只能表示正数,为了能表示负数,需要再加一个符号位。每次运算时计算机通过判断符号位来判断要执行的运算。为了让计算机每次运算时可以不用看符号位,于是发明了反码。

2. 反码:

  • 定义:正数的反码和原码一样,负数的反码就是在原码的基础上符号位保持不变,其他位取反。
  • 其它:但反码依然存在问题,于是引出补码。

3. 补码:

  • 定义:正数和 0 的补码就是该数字本身。负数的补码则是将其对应正数按位取反再加 1。
  • 其它:从此,只要一种加法电路就可以处理各种有符号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路和补码电路即可以完成各种有符号数加法和减法,在电路设计上相当方便。

4. 其它:

在反码系统中,0 有两种表示方式(1……0 & 0……0)。补码系统的 0 就只有一个表示方式。

参考:

二进制 - 一文读懂原码、反码与补码_个人文章 - SegmentFault 思否

https://zh.wikipedia.org/zh-hk/%E5%8E%9F%E7%A0%81

Need fastest way to convert 2's complement to decimal in C - Stack Overflow

你可能感兴趣的:(笔记,数电,机器码)