ALU是计算机CPU的核心,即 算术逻辑单元(arithmetic and logic unit)
ALU有几大功能,是计算机计算最基础的功能:
1.算术运算:包含加法、减法等
2.逻辑运算:主要是布尔运算,逻辑和、或、非、异或等
3.求补器:计算机中,二进制补码极其重要,可以求一个二进制的补码(源码取反得反码,反码加一得补码)
4.移位器:主要有 算术右移、逻辑右移、左移
5.状态标志:一个记录状态的标志。
/**
以下加法减法等都默认是相同长度的,如果长度不同会报错,当然,我只是懒得处理。 20 */
public class ALU {
/**
* 返回一个整数的定长二进制字符串(补码)
*
* @param len 指定长度
*/
public String Int2Binary(int n, int len) {
// return Integer.toBinaryString(n);//注意,这个方法返回的是无符号的二进制,而且长度随参数而变的,故不可行,但是负数是可行的,负数返回32位
String s = "";
for (int i = len - 1; i >= 0; i--) {
s += ((n >> i) & 1) == 1 ? "1" : "0";
}
return s;
}
/**
* 默认长度,即可以满足的最小长度
*/
public String Int2Binary(int n) {
if (n == 0) return "0";
if (n > 0) {
return "0" + Integer.toBinaryString(n);
} else {
return getNegative("0" + Integer.toBinaryString(-n));
}
}
public int binary2Int(String binary) {
if(binary.charAt(0)=='0')
return Integer.valueOf(binary,2);
else return -Integer.valueOf(getNegative(binary));
}
/**
* 加法器:计算两个二进制的和
*
* @param binary1
* @param binary2