位操作实现加法

本文介绍了一种利用位运算实现整数加法的方法。通过不断进行异或与和与操作来分别获取不考虑进位的当前位相加结果以及进位情况,并将进位左移一位,再与当前位相加结果进行下一轮运算,直至不再产生进位为止。

简述:

设想使用位操作,实现加法


思路:

1. 做与操作,得到相同的位,左移进位得到一个值

2. 做异或操作,得到不同的位,得到另一个值

上两个值循环直到其中某个为0 ,选另一个为最终结果


实现:

package com.anialy.JavaTest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;


public class App 
{
    public static void main( String[] args ){
        System.out.print("请输入两个数字:");
        InputStream is = System.in;
        InputStreamReader isr = new InputStreamReader(is);   
        BufferedReader bufferReader = new BufferedReader(isr);
        try{  
            String lineStr = null;  
            lineStr = bufferReader.readLine();
            String[] nums = lineStr.split(" ");
            int a = Integer.parseInt(nums[0]);
            int b = Integer.parseInt(nums[1]);
            System.out.println("和:" + opAdd(a,b));
        }catch(IOException e){  
            e.printStackTrace();  
        }  
    }
    
    private static int opAdd(final int a, final int b){
    	int x = a;
    	int y = b;
    	while(x!=0 && y!=0){
    		int xt = x;
    		x = xt&y;
    		x <<= 1;
    		y = xt^y;
    	}
    	return x==0?y:x;
    }
}

输出:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值