为什么正数不会被2的补码存储?

时间:2014-02-19 17:02:07

标签: c char

我听说chars范围内的负数以2的赞美存储。 为什么只有负数? 为什么正数不会被2的赞美存储?

1 个答案:

答案 0 :(得分:1)

数字 x 的两个补码是2 n - x ,其中 n < / em>是用于存储数字的位数。

在表示整数的二进制补码系统中,正数存储为常规(二进制编码)值,负数存储为两者的大小补码。

例如,四个四位:

 0 = 0000 (binary)
 1 = 0001
 2 = 0010
 3 = 0011
 4 = 0100
 5 = 0101
 6 = 0110
 7 = 0111

-8 = 16-8 =  8 = 1000
-7 = 16-7 =  9 = 1001
-6 = 16-6 = 10 = 1010
-5 = 16-5 = 11 = 1011
-4 = 16-4 = 12 = 1100
-3 = 16-3 = 13 = 1101
-2 = 16-2 = 14 = 1110
-1 = 16-1 = 15 = 1111

因此,二进制补码系统是一种将无符号二进制范围分成两部分并将其中一半(初始为0位)用于非负数(以简单二进制编码)和另一半(用负数的初始1位)(用二进制补码编码)。

这个系统有一些很好的属性,特别是对于二进制补码系统来说,简单算术与无符号二进制一样。考虑添加1100和0101:

  Bits    Plain Binary    Two’s Complement System
  1100    12              -4
+ 0101     5               5
  ----    --              --
  0001     1 (wrapped)     1