java中十进制数的8位表示

时间:2015-01-31 12:01:20

标签: java binary

我目前正在努力进行一项练习,将-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]);
            }

1 个答案:

答案 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);
}