十进制转二进制补码
首先要明确的是:十进制直接转成二进制是转化为二进制原码,正数的原码和补码相同,但负数的原码按位取反末位加一才是补码。
因此流程图大概如下:
整个代码我贴在最后
主要逻辑代码:
public static String convert(int num) {
StringBuilder resultString = new StringBuilder();
// 初始化补码数组,共12位
String[] complementStrings = new String[] {
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" };
boolean ifNegative = false;
if (num < 0) {
complementStrings[0] = "1";
num = -num;
ifNegative = true;
}
// 加入到补码的数组中,开头从12-strings.length开始
String[] strings = Integer.toString(num, 2).split("");
// 对应在strings数组中的下标
int j = 0;
for (int i = 12 - strings.length; i < 12; i++) {
complementStrings[i] = strings[j];
j++;
}
// 如果为负数,先全部取反,否则直接拼接
if (ifNegative) {
for (int i = 1; i < complementStrings.length; i++) {
if (complementStrings[i].equals("1")) {
complementStrings[i] = "0";
} else {
complementStrings[i] = "1";
}
}
// 送进函数加一
resultString.append(binaryPlusOne(complementStrings, 11, 1));