剑指offer_12.31_Day_1
作者:互联网
不用加减乘除做加法
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 不用四则运算,必然是依靠位运算。 位运算包括,与,或,异或,取反,左移,右移。 分别为: 与:& 两者都为1则1 或:| 两者有1为1 异或:^ 该位不同为1 取反: ~ 1换成0 0换1 左移 ,右移,<< >> 按位移动 如果实现加法,比如6+11=17 也就是 0110 1011 异或的话,得出1101也就是 6+11不进位的情况,所以加上进位,也就是与运算,再左移一位,这样的话,就变成,不进位和进位的情况相加。 那可以再次调用函数,直到,进位为0的时候。class Solution { public:int Add(num1,num2) { while(num2!=0) { int temp=num1^num2; num1=(num1&num2)<<1; num2=temp; } return num1; };
标签:num1,num2,offer,12.31,左移,取反,异或,Day,进位 来源: https://www.cnblogs.com/kinstday/p/12127643.html