java实现不用加减乘除做2个数的加法

来源:互联网 发布:linux下解压zip包 编辑:程序博客网 时间:2024/05/22 00:55
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+7 = 12 

5 -> 0101

7 -> 0111

(0101&0111)<<1 =1010;//表示二进制进位了

0111^0101 = 0010//或是查看两个数哪些二进制位只有一个为1

//step1:按位与是查看两个数哪些二进制位都为1,这些都是进位位,结果需左移一位,表示进位后的结果
//step2:异或是查看两个数哪些二进制位只有一个为1,这些是非进位位,可以直接加、减,结果表示非进位位进行加操作后的结果
//step3:num1&num2是查看有没有进位位了,如果有,需要重复step1、step2;如果没有,保留n1、n2上二进制为1的部分,用或将之合为一
第二次
1010 ^ 0010 =  1000
1010 & 0010 =00100
第三次
10000100=  1100
10000100 =0000


0 0
原创粉丝点击