题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
题解: 不用加减乘除的加法运算,需要用到位运算。
(1)将两数异或
异或0+00 ^ 0 = 00+10 ^ 1 = 11+01 ^ 0 = 11+11 ^ 1 = 0(答案错误)我们从以上表格可以看出,当涉及到进位时结果就会错误,所以我们需要处理进位。
(2)两数相与并左移一位
与运算1 & 1 = 1(需要进位)1 & 0 = 0(无需进位)0 & 1 = 0(无需进位)0 & 0 = 0(无需进位)我们发现,两数相与结果为1时需要进位,为0时则不需进位。 进位操作:((1 & 1) << 1) = ( 0 << 1 ) = 10
拥有了两个基本表达式:
执行加法 x ^ y进位操作 ( x & y ) << 1