什么是“补码”?

2024-01-03

我正在学习计算机系统课程并且已经挣扎,部分地,与二进制补码 http://en.wikipedia.org/wiki/Two%27s_complement。我想理解它,但我读过的所有内容都没有为我提供完整的图片。我读过维基百科文章 http://en.wikipedia.org/wiki/Two%27s_complement以及其他各种文章,包括我的教科书 https://rads.stackoverflow.com/amzn/click/com/013034074X.

什么是二进制补码,我们如何使用它以及它如何在强制转换(从有符号到无符号,反之亦然)、按位运算和移位运算等操作中影响数字?


二进制补码 https://en.wikipedia.org/wiki/Two%27s_complement是一种存储整数的巧妙方法,因此常见的数学问题很容易实现。

要理解,您必须考虑其中的数字binary https://en.wikipedia.org/wiki/Binary_number.

它基本上说,

  • 对于零,请使用全 0。
  • for positive integers, start counting up, with a maximum of 2(number of bits - 1)-1.
  • 对于负整数,做完全相同的事情,但交换 0 和 1 的角色并倒数(因此不是从 0000 开始,而是从 1111 开始 - 这是“补数”部分)。

让我们用 4 位的迷你字节来尝试一下(我们将其称为nibble http://en.wikipedia.org/wiki/Nibble- 1/2 个字节)。

  • 0000 - zero
  • 0001 - one
  • 0010 - two
  • 0011 - three
  • 0100 to 0111- 四到七

That's as far as we can go in positives. 23-1 = 7.

对于底片:

  • 1111- 负一
  • 1110- 负二
  • 1101- 负三
  • 1100 to 1000- 负四到负八

请注意,您会获得负数的一个额外值(1000= -8) 你不喜欢积极的一面。这是因为0000用于零。这可以被认为是数轴 https://en.wikipedia.org/wiki/Number_line计算机。

区分正数和负数

这样做,第一位就扮演了“符号”位的角色,因为它可以用来区分非负十进制值和负十进制值。如果最高有效位是1,那么二进制可以说是负数,就好像最高有效位(最左边)是0,你可以说小数值是非负的。

“符号大小” https://en.wikipedia.org/wiki/Signed_number_representations#Signed_magnitude_representation负数只是将正数的符号位翻转,但这种方法必须处理解释1000 (one 1紧随其后的是所有0s) 为“负零”,这令人困惑。

“一个的补语” https://en.wikipedia.org/wiki/Ones%27_complement负数只是其正数的位补,这也导致了令人困惑的“负零”1111(所有)。

除非您的工作非常接近硬件,否则您可能不必处理补码或符号数值整数表示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是“补码”? 的相关文章

随机推荐