概述
两个十进制数不使用算术运算符相加。方法为用二进制相加。
只需要 a ^ b 接着 (a & b) << 1 循环往复
(^ 异或不同为真)(& 与 相同为真)
a ^ b 异或用来计算非进位部分
a & b 用来计算进位部分,由于目标已经进位,就需要在原基础上左移一位 << 1
例如:1100 + 0110
1100 ^ 0110 先计算非进位部分使用 ^ 不同为真,只有同位上为1和0时结果才是1,最终结果为1001。
再计算进位部分使用&同真为真,都为1时进位,结果是0100,此时需要进一位,就要左移一位 << 1
// 两个数不使用算术运算符实现相加
public int add(int a, int b) {
int sum = 0, carry = 0;
while(b != 0) {
sum = a ^ b; // 异或计算未进位的部分
carry = (a & b) << 1; // 进位部分3
a = sum; // 保存未进位部分,再次计算
b = carry; // 保存进位部分,再次计算
}
return a; // 最后无进位,异或的结果即加法结果
}
两个二进制数相加也用了相同的方法
注意: 32 位整数会溢出
// 二进制相加
public String addBinary(String a, String b) {
int x = Integer.parseInt(a, 2);
int y = Integer.parseInt(b, 2);
int sum = 0;
int carry = 0;
while (y != 0) {
sum = x ^ y;
carry = (x & y) << 1;
x = sum;
y = carry;
}
return Integer.toBinaryString(x);
}
最后
以上就是细心含羞草为你收集整理的算法:两个数不使用算术运算符相加(以及二进制相加)的全部内容,希望文章能够帮你解决算法:两个数不使用算术运算符相加(以及二进制相加)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复