我目前正在努力进行一项练习,将-128和+127之间的带符号十进制数转换为二进制补码系统中的8位二进制表示。
我能够得到正数的表示,但是当输入的代码为负数时,它会进行计算,但我无法获得正确的二进制再存在。例如,8位重新进行中的“57”将是“00111001”,并且在相同的重新进入中的-57将是“11000111”
我很确定我必须做一个if语句但是我无法让它工作。很丢失
System.out.println("Please enter a decimal to modify into it's binary.");
decimalInput = stdIn.nextInt();
if (decimalInput < 0){
decimalInput= Math.abs(decimalInput);
if(i==0){
binary[i]=1;
}else if (i==1){
binary[i] = 0;
}
}
for ( i = binary.length-1; i >= 0; i--){
remain = decimalInput % 2;
binary[i]=remain;
decimalInput = decimalInput / 2;
}
for (i =0; i <8; i++){
System.out.print(binary[i]);
}
答案 0 :(得分:1)
那是因为你再次使用decimalInput计算下一个for循环中数字的二进制数(发布后取十进制数的绝对值并将该数字转换为二进制)。你正在重复循环。
您可以执行以下操作:
int computeValue = decimalInput;
if (decimalInput < 0){
computeValue= Math.abs(decimalInput);
}
for (...){
negRemain = computeValue% 2;
...
}
编辑2s补码: if(decimalInput&lt; 0){ handleNegativeNumbers(二进制); }
private static void onesComplements(int[] binary) {
for (int i = 0; i < binary.length; i++) {// will perform one's complement
if (binary[i] == 0) {
binary[i] = 1;
} else {
binary[i] = 0;
}
}
}
private static void twosComplement(int[] binary) {
int carry = 1;
for (int i = binary.length - 1; i >= 0; i--) {// will perform two's complement by adding one
if (carry == 1) {
if (binary[i] == 0) {
binary[i] = 1;
carry = 0;
break;
} else {
binary[i] = 0;
}
}
}
}
private static void handleNegativeNumbers(int[] binary) {
onesComplements(binary);
twosComplement(binary);
}