我问这个问题是因为我在Stack Overflow中找到了一个不使用减号(' - ')运算符来查找差异的示例。
答案由差异= a + ~b +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
的补充(NOT),
~(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说:
数字的二进制补码在大多数算术中表现为原始数的负数,正数和负数可以自然地共存。