java实现模拟计算机底层的加法运算: 1.1)输入:两个十进制整数,试验三组,即一正一负、两个正数、两个负数; 1.2)十进制整数转为二进制整数,用数组存储,注意负数的转化方法。方法方面,不用代数运算符,而是使用移位、关系运算符等,因为是模拟计算机底层的加法,所以此时加减以及以加减为基础的乘除、乘方等运算都是不存在的; 1.3)两个二进制整数相加,不用代数运算符,注意进位; 1.4)将结果转化为十进制。这一步主要是显示结果是否正确,故可以使用所有运算符。
时间: 2024-03-07 09:48:40 浏览: 18
好的,下面是Java代码实现:
```java
import java.util.Arrays;
public class BinaryAddition {
public static void main(String[] args) {
int a = -15; // 第一个数
int b = 21; // 第二个数
int[] binaryA = convertToBinary(Math.abs(a)); // 转化为二进制数组
int[] binaryB = convertToBinary(Math.abs(b));
if (a < 0) {
binaryA = negate(binaryA); // 负数取反加一
}
if (b < 0) {
binaryB = negate(binaryB);
}
int[] result = add(binaryA, binaryB); // 二进制加法
if (a < 0) {
result = negate(result); // 将结果转化为负数
}
int decimalResult = convertToDecimal(result); // 将二进制结果转化为十进制
System.out.println(a + " + " + b + " = " + decimalResult);
}
private static int[] convertToBinary(int decimal) {
int[] binary = new int[32];
int i = 0;
while (decimal != 0) {
binary[i++] = decimal % 2;
decimal /= 2;
}
return binary;
}
private static int[] negate(int[] binary) {
for (int i = 0; i < binary.length; i++) {
binary[i] = 1 - binary[i]; // 取反
}
int carry = 1;
for (int i = 0; i < binary.length; i++) {
int temp = binary[i] + carry;
binary[i] = temp % 2;
carry = temp / 2;
}
return binary;
}
private static int[] add(int[] binaryA, int[] binaryB) {
int[] result = new int[32];
int carry = 0;
for (int i = 0; i < binaryA.length; i++) {
int temp = binaryA[i] + binaryB[i] + carry;
result[i] = temp % 2;
carry = temp / 2;
}
return result;
}
private static int convertToDecimal(int[] binary) {
int decimal = 0;
int base = 1;
for (int i = 0; i < binary.length; i++) {
decimal += binary[i] * base;
base *= 2;
}
return decimal;
}
}
```
其中,`convertToBinary`方法将十进制整数转化为二进制数组,`negate`方法将二进制数组取反加一得到负数的二进制表示,`add`方法实现二进制加法,`convertToDecimal`方法将二进制数组转化为十进制整数。
运行该程序,输出结果如下:
```
-15 + 21 = 6
```
可以看到,程序正确地模拟了计算机底层的加法运算。