“〜”如何在C中找到补充?

时间:2014-01-08 16:45:56

标签: c++ c bitwise-operators

我问这个问题是因为我在Stack Overflow中找到了一个不使用减号(' - ')运算符来查找差异的示例。

答案由差异= a + ~b +1;

给出

为什么要+1?

1 个答案:

答案 0 :(得分:9)

在c中,它是一个逐位的NOT运算符。阅读:Operators in C and C++

a + ~b + 1;  

是用于减法的“2的补码” 1 方法。要从2计算机中减去3,可以使用此2's complement method。假设您在8位架构上,则:(3) 10 =(0000 0011) 2 和(2) 10 =(0000 0010) 2 现在考虑2的补充(N​​OT),

~(0000 0010) = 1111 1101

现在使用2的补码(只需加1)

 1111 1101 + 1 = 1111 1110 

现在将2的2补码添加到3;

  0000 0011 
+ 1111 1110 
------------
1 0000 0001  = 1 in decimal. (3 - 2 = 1)
^
|
Carry Bit  

<子> 1。 Wiki说:

  

数字的二进制补码在大多数算术中表现为原始数的负数,正数和负数可以自然地共存。