0

例如,

二进制中的 13 是:00000000 00000000 00000000 00001101。-13 将存储为 10000000 00000000 00000000 00001101(使用最高有效位表示符号)还是使用二进制补码存储?(特别是在 C 中)

如果它使用最高有效位来表示符号存储,那么实际上何时使用二进制补码?

4

2 回答 2

0

二进制补码是一种流行的表示数字的形式,其中二进制范围的一半是负数。它可以用于所有算术运算,而不仅仅是加法和减法。简而言之,以这种方式存储数字“有意义”。反对它的一个原因可能是您希望避免使用太多位的压缩算法(例如之字形格式等)。

例如,将两个用二进制表示为10111111101的 8 位数字“5”和“-3”相乘,计算机可能会将其分解为检查一个因素中的每个位并将另一个相加的问题每个位组移位的因子:

  5<<0
+ 5<<2 (skipping 5<<1, because that bit is not set)
+ 5<<3
+ 5<<4
+ 5<<5
+ 5<<6
+ 5<<7
------
  1265 

1265换行到2418 位空间中,即 binary 11110001,它是 . 的二进制补码-15。在一些较旧的计算机上,乘法需要更长的时间来设置数字的多少位,这可能是由于需要额外的算术。

除法有点棘手,是最昂贵的算术运算,但这里的本质是二进制的恭维是一种存储数字的方法,计算机易于使用,因为之前测试符号位不需要额外的逻辑做大部分操作。

换句话说,“不”,它不仅用于加减法。

于 2020-03-21T22:56:51.460 回答
0

C 可以根据实现以任何格式存储负数。最流行的(现在几乎没有使用其他系统)是两个恭维格式。

但你的数字不是 2compliment 的。

二进制 -13 是 0b11111111111111111111111111110011

查看负数的无符号表示:https ://godbolt.org/z/ajDDvc

于 2020-03-21T22:25:42.353 回答