binary - 很好地解释了为什么 x-1 “看起来” 像它在二进制中的方式
问题描述
让我们取28
二进制数:
0b11100 # 28
如果我们1
从数字中减去,它看起来像这样:
0b11011 # 27
我将如何解释它的“外观”是,当1
从一个数字中减去时,最右边的 1 位设置为零,之后的所有零都设置为 1。例如:
0b10101 - 1
= 0b10100
0b01000 - 1
= 0b00111
0b10000000 - 1
= 0b01111111
对于为什么会发生这种情况,最好的解释是什么?我确信这是二进制补码的一个属性,但我正在努力找出向自己解释这一点的最佳方法,以便我能更深入地理解它。
解决方案
二进制数具有一般形式,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 )