《剑指offer》-求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号

本文介绍了一种不使用+、-、*、/等四则运算符号实现两整数相加的方法。通过位运算中的异或(^)来计算不考虑进位情况下的和,并利用与(&)运算判断是否有进位发生,再将进位结果左移实现进位。通过迭代直至没有进位为止。
/*
 * 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
 * 思路:不能使用四则运算,就只剩下位运算了。例如17+5
 * 17转化成二进制10001,5转化成二进制0101。
 * 首先不考虑进位,则1+1=0,1+0=1,0+1=1,0+0=0
 * 可以看出这是位^运算(异或),这一步的结果是10100.
 * 
 * 接下来考虑是否产生进位,则1+1=1,0+1=0,1+0=0,0+0=0
 * 可以看出这是位&运算(与),这一步的结果是00001,
 * 考虑进位要加在前面一位上,所以将结果左移00010
 * 
 * 最后10100^00010=10110,转化为十进制为22
 * 注:与&、非~、或|、异或^
 */
public class Add {
	public int add(int num1,int num2) { 
		
		while(num2 != 0) {	//迭代终止条件:进位为0
			
			//不考虑进位
	        int temp1 = num1 ^ num2;
	        
	        //获取进位
	        int temp2 = (num1 & num2) << 1;
	        
	        num1 = temp1;
	        num2 = temp2;
		}
        
        return num1;
    }
	
	public static void main(String[] args) {
		System.out.println(new Add().add(5, 17));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值