【11】不能使用四则运算求两个整数的和

简介: 题目:给定两个整数a和b,要求不能使用+、-、*、/四则运算求两个数的和 方案:1. 四则运算不能算的情况下,肯定只能借助位运算,所以应该考虑位运算            2.


题目:给定两个整数a和b,要求不能使用+、-、*、/四则运算求两个数的和


方案:1. 四则运算不能算的情况下,肯定只能借助位运算,所以应该考虑位运算

           2. 假设两个数的二进制位00101 和 10001,两个数相加的过程就是

               第一步:先把二进制的各位相加但不进位,10100;

               第二步:记下进位,00010

               第三步:把前两步的结果相加,得到10110

           3. 分析上述三个过程发现

               第一步实际上就是两个数的异或结果,0+0 = 0,0+1 = 1+0 = 1,1+1 = 0;

               第二步进位就是两个数&的结果再左移一位:(00101 & 10001) << 1 = 00010

               第三步是两数相加,和要求的一样可以递归进行,直到第二个数为0为止。

//循环求两个数的和
int GetSum(int num1, int num2){
    while(num2 != 0){
	    int sum = num1^num2;
	    int carry = (num1&num2)<<1;
	    num1 = sum;
	    num2 = carry;
    }
    return num1;
}

//递归求两个数的和
int GetSum(int num1, int num2){
	if(num2 == 0){
	    return num1;
	}
	int sum = num1^num2;
	int carry = (num1&num2)<<1;
	return GetSum2(sum, carry);
}

目录
相关文章
|
1天前
63.取一个整数a从右端开始的4~7位。
63.取一个整数a从右端开始的4~7位。
5 0
|
6天前
|
C语言
C语言两个数相除怎么得到浮点数
有些时候,使用C语言的相除运算符计算两个变量相除运算结果,可是却无法保留小数,比如3/2,打印输出是1,而不是1.5之类有小数的值。这是为什么呢?可能有两种原因,如下
26 2
|
6天前
|
存储 算法
计算器——可支持小数的任意四则运算(中缀表达式转为后缀表达式算法)
计算器——可支持小数的任意四则运算(中缀表达式转为后缀表达式算法)
22 1
|
6天前
取一个整数 a 从右端开始的 4~7 位
取一个整数 a 从右端开始的 4~7 位。
24 1
|
9月前
wustojc2002整数四则运算
wustojc2002整数四则运算
45 0
|
9月前
wustojc1006求2个整数的和
wustojc1006求2个整数的和
31 0
复数四则运算
复数四则运算
88 0
|
C语言
5.1.4_带符号整数的表示和运算_原反补
计算机组成原理之带符号整数的表示和运算_原反补
134 0
5.1.4_带符号整数的表示和运算_原反补
05:整数大小比较
05:整数大小比较
93 0