不使用加法运算符添加两个数字

时间:2014-03-29 18:45:19

标签: c bitwise-operators integer-arithmetic

  

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

有人可以向我解释这个吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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