首页 > 解决方案 > 很好地解释了为什么 x-1 “看起来” 像它在二进制中的方式

问题描述

让我们取28二进制数:

0b11100     # 28

如果我们1从数字中减去,它看起来像这样:

0b11011     # 27

我将如何解释它的“外观”是,当1从一个数字中减去时,最右边的 1 位设置为零,之后的所有零都设置为 1。例如:

  0b10101 - 1
= 0b10100

  0b01000 - 1
= 0b00111

  0b10000000 - 1
= 0b01111111

对于为什么会发生这种情况,最好的解释是什么?我确信这是二进制补码的一个属性,但我正在努力找出向自己解释这一点的最佳方法,以便我能更深入地理解它。

标签: binarybit-manipulationtwos-complement

解决方案


二进制数具有一般形式,N = dn x b^n + dn-1 x b^n-1… d1 x b^1 + d0 x b^0其中 b 是基数 (2),d 是数字 < 基数 (0, 1),n 是位置。

我们写下没有 b 的二进制数(因为我们知道它总是 2),也没有它的 n 指数,它隐含地从 0 表示最低有效位(最右边),1 到最右边,等等。

例如,您的数字 28 是1 x 2^4 + 1 x 2^3 + 1 x 2^2 + 0 x 2^1 + 0 x 2^0 = 1x 16 + 1x 8 + 1x 4 + 0x 2 + 0x 1 .

二进制:

  • 1 - 1 = 0
  • 0 - 1 = 1 并且你将 - 1 带到左边的下一个位置(与十进制的 10 - 1 相同,0 - 1 是 9 并且将 - 1 带到十分位的顺序)

当减去 1 时,你从最右边的位置开始,如果有 0,你把它变成 1 并将减法带到下一个(左边)位置(并且一直向左链接,直到你找到可以减去而不影响更高位置的位置)

0b01000 - 1 可以写成0 x 2^4 + 1 x 2^3 + 0 x 2^2 + 0 x 2^1 + 0 x 2^0 - 1 x 2^0。用简单的十进制表示,即 8 - 1 = 7,二进制表示 7 为 0 x 2^4 + 0 x 2^3 + 1 x 2^2 + 1 x 2^1 + 1 x 2^0 (4 + 2 + 1 )


推荐阅读