MEL*_*WIN -3 c c++ bitwise-operators
我问这个问题是因为我在Stack Overflow中找到了一个不使用减号(' - ')运算符来查找差异的示例.
答案是由差异= a + ~b +1给出的;
为何+1?
在c中,它是一个逐位的NOT运算符.阅读:C和C++中的运算符.
a + ~b + 1;
Run Code Online (Sandbox Code Playgroud)
是"2的补码" 1减法方法.2从3计算机中减去可以使用这个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的补2到3;
0000 0011
+ 1111 1110
------------
1 0000 0001 = 1 in decimal. (3 - 2 = 1)
^
|
Carry Bit
Run Code Online (Sandbox Code Playgroud)
1. 维基说:
数字的两个补码在大多数算术中表现得像原始数字的负数,正数和负数可以以自然的方式共存.