表示有符号整数的不同方式
有符号整数是带有正“+”或负号“-”的整数。由于计算机只理解二进制,因此有必要以二进制形式表示这些有符号整数。
在二进制中,有符号整数可以用三种方式表示:
- 签名位。
- 1 的补码。
- 2 的补码。
让我们看看为什么 2 的补码被认为是最好的方法。
有符号位表示
在有符号整数表示方法中,遵循以下规则:
1. MSB(最高有效位)代表整数的符号。
2. 幅度由 MSB 以外的其他位表示,即 (n-1) 位,其中 n 是编号。位。
3. 如果数字为正,则 MSB 为 0,否则为 1。
4. n 位数的有符号整数表示的范围为 –(2^{n-1}-1) 到 (2)^{n-1}-1。
例子:
Let n = 4
Range:
–(2^{4-1}-1) to 2^{4-1}-1
= -(2^{3}-1) to 2^{3}-1
= -(7) to+7
For 4 bit representation, minimum value=-7 and maximum value=+7
有符号位表示: Positive Numbers Negative NumbersSign Magnitude Decimal Representation 0 0 0 0 +0 0 0 0 1 +1 0 0 1 0 +2 0 0 1 1 +3 0 1 0 0 +4 0 1 0 1 +5 0 1 1 0 +6 0 1 1 1 +7 Sign Magnitude Decimal Representation 1 0 0 0 -0 1 0 0 1 -1 1 0 1 0 -2 1 0 1 1 -3 1 1 0 0 -4 1 1 0 1 -5 1 1 1 0 -6 1 1 1 1 -7
缺点:
1. 对于 0,有两种表示形式:-0 和 +0,因为 0 既不是 –ve 也不是 +ve。
2. 在表示的 2^n 位中,我们只能使用 2^{n-1} 位。
3. 数字不是循环顺序的,即在最大数字之后(例如,+7)下一个数字不是最小数字(例如,+0)。
4.对于负数签名扩展不起作用。
例子:
+5 签名扩展
-5 的签名扩展
5. 正如我们在上面看到的,对于 +ve 表示,如果 4 位扩展到 5 位,则只需在 MSB 中附加 0。
6. 但是如果在-ve 表示中做同样的事情,我们将不会得到相同的数字。即10101≠11101。
1 的有符号整数的补码表示
在 1 的补码表示中,使用以下规则:
1. 对于 +ve 数,表示规则与有符号整数表示相同。
2. 对于 -ve 数字,我们可以采用以下两种方法中的任何一种:
- 将 +ve 数写成二进制并取 1 的补码。
1’s complement of 0 = 1 and 1’s complement of 1 = 0
Example:
(-5) in 1’s complement:
+5 = 0101
-5 = 1010
- 为 –X 写出 2^n-1-X 的无符号表示。
Example:
–X = -5 for n=4
2^4-1-5=10 ->1010(Unsigned)
3. n 位数的 1 的补码整数表示的范围为 –(2^{n-1}-1) 到 2^{n-1}-1。
1 的补码表示:Positive Numbers Sign Magnitude Number 0 0 0 0 +0 0 0 0 1 +1 0 0 1 0 +2 0 0 1 1 +3 0 1 0 0 +4 0 1 0 1 +5 0 1 1 0 +6 0 1 1 1 +7 Negative Numbers Sign Magnitude Number 1 0 0 0 -7 1 0 0 1 -6 1 0 1 0 -5 1 0 1 1 -4 1 1 0 0 -3 1 1 0 1 -2 1 1 1 0 -1 1 1 1 1 -0
缺点:
- 对于 0,有两种表示形式:-0 和 +0,这不应该是这种情况,因为 0 既不是 –ve 也不是 +ve。
- 在表示的 2^n 位中,我们只能使用 2^{n-1} 位。
有符号位表示的优点:
1. 数字按循环顺序排列,即在最大数字之后(例如,+7),下一个数字是最小数字(例如,-7)。
2.对于负数签名的扩展作品。
示例: +5 的签名扩展
-5 的签名扩展
3. 如上所示,对于 +ve 和 -ve 表示,如果将 4 位扩展到 5 位,则只需在 MSB 中分别附加 0/1。
2 的补码表示
在 2 的补码表示中,使用了以下规则:
1.对于+ve数,表示规则与有符号整数表示相同。
2. 对于 -ve 数字,我们可以用两种不同的方式来表示数字。
- 以 n 位表示形式为 –X 写出 2^nX 的无符号表示。
Example:
(-5) in 4-bit representation
2^4-5=11 -→1011(unsigned)
- 写出 +X 的表示形式并取 2 的补码。
To take 2’s complement simply take 1’s complement and add 1 to it.
Example:
(-5) in 2’s complement
(+5) = 0101
1’s complement of (+5) = 1010
Add 1 in 1010: 1010+1 = 1011
Therefore (-5) = 1011
3. n 位的表示范围为 –(2^{n-1} ) 到 (2)^{(n-1)-1}。
2 的补码表示(4 位)
优点:
- 0 的表示没有歧义。
- 数字是循环顺序的,即+7 之后是-8。
- 签名扩展有效。
- 可以使用 2 的补码表示的数字范围非常大。
由于有符号整数的 2 的补码表示的所有上述优点,二进制数使用 2 的补码方法而不是有符号位和 1 的补码表示。