简介:计算机中加法运算其实是将十进制转成二进制进行计算,详细请看上面的视频链接介绍。
半加法器
XOR表示异或,即^,相同为0,不同为1
AND表示按位与,即&,都为1才为1,否则为0
全加法器:
实现加法的原理
代码实现:
public class Main {
public static void main(String[] args) {
int a = 2;
int b = 3;
System.out.println("用位运算计算实现加原理," + a + "+" + b + "的结果:");
System.out.println("十进制结果:" + add(a, b));
}
/**
* 计算a+b的结果
*/
public static int add(int a, int b) {
String res = binAdd(Integer.toString(a, 2), Integer.toString(b, 2));
System.out.println("二进制结果:" + res);
return Integer.parseInt(res, 2);
}
/**
* 二进制加法
*
* @param a 二进制
* @param b 二进制
* @return 二进制结果
*/
public static String binAdd(String a, String b) {
// 获取最大的长度
int len = Math.max(a.length(), b.length());
// 二进制长度短的前面补0
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < Math.abs(a.length() - b.length()); i++) {
stringBuilder.append("0");
}
if (a.length() >= b.length()) {
b = stringBuilder.toString() + b;
} else {
a = stringBuilder.toString() + a;
}
// 取反
a = new StringBuilder(a).reverse().toString();
b = new StringBuilder(b).reverse().toString();
// 半加法器
//int carry = a & b;
//int sum = a ^ b;
// 存放进位
int carry;
// 存放位数的和
int sum;
// 存放进位后的值
int num3 = 0;
// 存放二级制结果
StringBuilder res = new StringBuilder();
for (int i = 0; i < len; i++) {
int num1 = a.charAt(i) - '0';
int num2 = b.charAt(i) - '0';
if (i <= 0) {
// 半加法器
carry = num1 & num2;
sum = num1 ^ num2;
} else {
// 全加法器:
// 第一次半加法器
carry = num1 & num2;
sum = num1 ^ num2;
// 第二次半加法器
carry = carry | (sum & num3);
sum = sum ^ num3;
}
// 存放位数上的值
res.append(sum);
// 存放进位结果
num3 = carry;
}
if (num3 > 0) {
// 说明还有进位
res.append(num3);
}
return res.reverse().toString();
}
}