【算法】A+B problem 用位运算完成两数相加

剑指offer里面有一道算法题,就是不用加减乘除去做加法。很明显就是要用位运算完成加法,所有运算在计算机底层都是由二进制完成的,所以不能用运算符,就只能用位运算了。

java中的位运算

在Java里面,位运算对应运算符如下:

位运算 运算符
&
|
异或 ^
左移位 <
右移位 >

二进制数的加法

在计算机底层中,数的运算是通过位运算完成的,而位运算的对象是二进制数。下面看一下二进制的加法是怎么一个过程:

十进制数:3 + 5
相当于二进制数:11+101

【算法】A+B problem 用位运算完成两数相加_第1张图片

二进制运算也是一位一位地相加,如果两个数当前位都为1,则左边一位加上1。在看下面的变形,其实就是用位运算模拟进位过程,上面的数是原来的两个数的异或值,也就是不需要进位的那些位的值,下面的数是原来两个数的取与的值向左移一位,也就是进位后的值。那么一直重复这个操作,直到进位制为0,也就是没有进位啦,那么上面的数就是结果啦。

代码实现

import java.io.*;
import java.util.*;

public class Main{
     

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = in.nextInt();

        while(a != 0) {
            int temp = a & b < 1;
            b = a ^ b;
            a = temp;
        }

        System.out.println(b);
    }
}

你可能感兴趣的:(算法)