我们都知道,记忆中的负数通常表示为两个人的补码,就像这样
from x to ~x + 1
为了回去,我们不做明显的事情
~([~x + 1] - 1)
但相反,我们有
~[~x + 1] + 1
有人能解释一下为什么总是起作用吗?我想我可以用1位,2位,3位数来证明它,然后使用数学归纳法,但它并不能帮助我理解它是如何工作的。
谢谢!
发布于 2015-11-06 12:56:20
反正也是一样的。就是,~x + 1 == ~(x - 1)
。但让我们暂时搁置这件事。
f(x) = ~x + 1
是它自己的反面。证明:
~(~x + 1) + 1 =
(definition of subtraction: a - b = ~(~a + b))
x - 1 + 1 =
(you know this step)
x
还有,~x + 1 == ~(x - 1)
。为什么?井,
~(x - 1) =
(definition of subtraction: a - b = ~(~a + b))
~(~(~x + 1)) =
(remove double negation)
~x + 1
(有点不寻常的)减法的定义,a - b = ~(~a + b)
~(~a + b) =
(use definition of two's complement, ~x = -x - 1)
-(~a + b) - 1 =
(move the 1)
-(~a + b + 1) =
(use definition of two's complement, ~x = -x - 1)
-(-a + b) =
(you know this step)
a - b
发布于 2015-11-06 12:43:56
这是因为如果您增加~x (假设没有溢出)。然后将它转换回x,您已经相对于x增加了,但相对于x却减少了。同样的事情也是如此。假设变量x有一个特定的值,每次增加它时,相对于~x,您会注意到它会减少。
从程序员的角度来看,这就是你所能看到的。
Let short int x = 1 (0x0001)
then ~x = 65534 (0xFFFE)
~x + 1 = 65534 + 1 (0xFFFF)
~(~x+1) = 0 (0x0000)
~(~x+1) + 1 = 0 + 1 (0x0001)
https://stackoverflow.com/questions/33566989
复制相似问题