1

我一直在为看似简单的概念而苦苦挣扎,但我似乎一直在组合和混合二进制转换。

如果给定一个二进制数并应用 1 的补码,则反转所有位。使 0 成为 1 和 1 成为 0。对于 2 的补码,您可以像 1 的补码一样反转位并加 1。

这是否意味着您从字面上反转所有位?出于某种原因,我一直认为所有位都应该反转,除了最左边的位(符号位)。这里有一些例子..有人可以告诉我我这样做是否正确吗?

1101001

1 的补偿:0010110

2 的补偿:0010111


01110101

1 的补偿:10001010

2 的补偿:10001011


011110110

1的补偿:100001001

2 的补偿:100001011


谢谢。

4

1 回答 1

1

你的概念是完全正确的:

  • 一个补码 = 反转一切
  • 二进制补码 = 反转所有内容,包括最左边的位,然后加 1

您的前两个示例是正确的,最后一个示例有点奇怪,因为您通常使用多个字节(8 位),而您的示例有 9 位,但仍然适用相同的规则:

        (0000000)011110110
ones -> (1111111)100001001
twos -> (1111111)100001010  <-- I think you had a typo here, you stated the result would be 100001011

这是一篇关于该主题的精彩总结文章:http: //academic.evergreen.edu/projects/biophysics/technotes/program/2s_comp.htm

于 2013-03-15T21:17:24.010 回答