"〜"如何在C中找到补充?

MEL*_*WIN -3 c c++ bitwise-operators

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

答案是由差异= a + ~b +1给出的;

为何+1?

hac*_*cks 9

在c中,它是一个逐位的NOT运算符.阅读:C和C++中的运算符.

a + ~b + 1;  
Run Code Online (Sandbox Code Playgroud)

是"2的补码" 1减法方法.23计算机中减去可以使用这个2的补码方法.假设您处于8位体系结构,则:(3)10 =(0000 0011)2 和(2)10 =(0000 0010)2.
现在采取补充(NOT)2,

~(0000 0010) = 1111 1101
Run Code Online (Sandbox Code Playgroud)

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

 1111 1101 + 1 = 1111 1110 
Run Code Online (Sandbox Code Playgroud)

现在加入的2的补23;

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

1. 维基说:

数字的两个补码在大多数算术中表现得像原始数字的负数,正数和负数可以以自然的方式共存.

  • 此外,作为参考,重要的是要提到这假设二进制补码表示,因此它不是完全可移植的(尽管在几乎每个C实现中都使用了二进制补码) (3认同)