48.不用加减乘除做加法
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
题目解答
public class Solution { public int Add(int num1,int num2) { while(num2!=0){ int temp=num1^num2; //和 num2=(num1&num2)<<1; //进位 num1=temp; } return num1; } }
不能加减乘除,那就位运算啦
三步走的方式计算二进制值相加: 5-101,17-10001
第一步:相加各位的值,不算进位,异或操作(相同为0),101^10001=10100。
第二步:计算进位值,与操作(同1为1),再向左移一位,(101&10001)<<1=1<<1=10。
第三步重复上述两步,
各位相加 10100^00010=10110,进位值为(10100&10)<<1=0<<1=00,跳出循环,10110(22)为最终结果,否则重复上述两步。