原码、反码和补码以及NandGame减法器
本文介绍了原码、反码和补码的基本概念,通俗解释了为什么会设计负数的补码,以及NandGame减法器的做法。
原码、反码和补码
在计算机科学中,原码、反码和补码是数字表示方法,它们用于简化计算机中数字的算术运算,尤其是二进制数的加减运算。下面我将简要介绍这三种表示方法:
原码(Sign-Magnitude)
概念:
- 原码是一种最简单的表示有符号数的方法,它直接用二进制数表示一个数,包括正负号。
- 使用最高位(最左边的一位)表示符号:0表示正数,1表示负数。
- 其余位表示数值的大小。
规则:
- 对于正数:原码的表示与其二进制值相同。
- 对于负数:将其绝对值的二进制表示取原码,并将最高位设置为1(表示负数)。
示例:
- 8位原码表示:
- +5:00000101
- -5:10000101
原码的位数不固定!
- 可以是 8位、16位、32位、64位,取决于系统设计
不同位数的原码:
| 位数 | 符号位 | 数值位 | 范围(有符号) |
|---|---|---|---|
| 8位 | 1位 | 7位 | -127 ~ +127 |
| 16位 | 1位 | 15位 | -32767 ~ +32767 |
| 32位 | 1位 | 31位 | -2147483647 ~ +2147483647 |
例子(8位):
+5=0000 0101(符号位0,数值5)-5=1000 0101(符号位1,数值5)
例子(16位):
+5=0000 0000 0000 0101-5=1000 0000 0000 0101
反码(Ones' Complement)
概念:
- 反码主要用于表示负数。反码是通过对原码的数值部分逐位取反(0变1,1变0)得到的。
- 正数的反码和原码相同。对于负数,其反码是将原码除符号位外的所有位取反。
- 负数的反码是其原码除符号位外所有位取反(0 变 1,1 变 0)。
规则:
- 对于正数,反码与原码相同。
- 对于负数,反码是将原码中所有位(除了符号位)取反,即将每个二进制位从 0 改为 1,或者从 1 改为 0。
示例:
- 8位反码表示:
- +5:00000101
- -5: 11111010
补码(Two's Complement)
概念:
- 补码是计算机中最常用的表示方法,用于进行二进制加法运算。
- 对于正数,其补码与其原码相同。
- 负数的补码是其反码加1。
- 补码的一个重要特性是,任何负数的补码加上该数本身,结果总是 0。例如,十进制数 -5 的补码表示为
1111 1011<