0

在 c 中 ~ 是 1 的补码运算符。这相当于: ~a = -b + 1 所以,a - ~b -1 = a-(-b + 1) + 1 = a + b – 1 + 1 = a + b

谁能给我解释一下?

4

2 回答 2

4

从小学数学我们知道

a = -(-a);

从二进制补码我们知道

-a = (~a) + 1  (invert and add one)

所以我们知道

a + b 
= a - (-b)      elementary math
= a - (~b + 1)  twos complement
= a - (~b) - 1   distribute the negative (elementary math)
于 2014-03-29T18:58:42.890 回答
0

你是对的,~在c中总是1的补码(也就是按位不是)。你出错的地方是:C 不保证数字的 2 补码。所以你所有的计算都依赖于使用 C 的主要风格。

于 2014-03-29T19:01:34.510 回答