gpt4 book ai didi

java - java中十进制数字的8位表示

转载 作者:行者123 更新时间:2023-11-30 11:09:09 27 4
gpt4 key购买 nike

我目前正在努力练习将 -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 再次计算一个数字的二进制(在您获取十进制数的绝对值并将该数字转换为二进制后)。您正在重复相同的 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);
}

关于java - java中十进制数字的8位表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28251340/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com