java 中十进制数的 8 位表示

An 8-bit representation of decimal Numbers in java

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

那是因为您在下一个 for 循环中使用 decimalInput 再次计算数字的二进制(post 您采用十进制数的绝对值并将该数字转换为二进制)。您正在重复相同的 for 循环。

你可以这样做:

int computeValue = decimalInput;
if (decimalInput < 0){
     computeValue= Math.abs(decimalInput); 
}

for (...){
     negRemain = computeValue% 2;
     ...
}

编辑 2s 补码: 如果(十进制输入 < 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);
}