gpt4 book ai didi

java - 将十进制数转换为其补码的输出

转载 作者:行者123 更新时间:2023-12-01 07:52:49 24 4
gpt4 key购买 nike

将十进制数字转换为其 1 补码,然后再次将该数字转换为十进制的输出未按预期输出。

我的方法

我首先将数字从十进制转换为二进制。将所有 Os 替换为 1,反之亦然,然后将数字转换为十进制。

有人可以指导我吗?我做错了什么?

代码:

public static int complimentDecimal(int num) {
int p = 0;
String s1 = "";
// Convert Decimal to Binary

while (num > 0) {
p = num % 2;
s1 = p + s1;
num = num / 2;
}
System.out.println(s1);
// Replace the 0s with 1s and 1s with 0s
for (int j = 0; j < s1.length(); j++) {
if (s1.charAt(j) == 0) {
s1.replace(s1.charAt(j), '1');
} else {
s1.replace(s1.charAt(j), '0');
}

}
System.out.println(s1);

int decimal = 0;
int k = 0;
for (int m = s1.length() - 1; m >= 0; m--) {
decimal += (s1.charAt(m) * Math.pow(2, k));

k++;
}
return decimal;
}

最佳答案

首先,您需要定义二进制表示应具有的位数,否则补码表示没有意义。

如果转换100,则二进制为1100100
补码是0011011,即27
现在转换27。二进制为 11011,补码为 00100,即 4

现在将位长度定义为 8。
10001100100,补码 10011011,为 155
15510011011,补码 01100100,为 100
之所以有效,是因为每个二进制表示形式的长度都是 8 位。这对于整个补语的意义来说是绝对必要的。
考虑到您现在对可转换的数字有限制。
11111111255

现在我们已经讨论过我将更正您的代码

static int MAX_BITS = 8;
static int MAX_INT = (int)Math.pow(2, MAX_BITS) - 1;

public static int complimentDecimal(int num)
{
// check if number is to high for the bitmask
if(num > MAX_INT){
System.out.println("Number=" + num + " to high for MAX_BITS="+MAX_BITS);
return -1;
}

// Your conversion works!
int p=0;
String s1="";
//Convert Decimal to Binary
while(num>0)
{
p=num%2;
s1=p+s1;
num=num/2;
}

// fill starting zeros to match MAX_BITS length
while(s1.length() < MAX_BITS)
s1 = "0" + s1;

System.out.println(s1);

//Replace the 0s with 1s and 1s with 0s

// your approach on that is very wrong
StringBuilder sb = new StringBuilder();
for(int j=0;j<s1.length();j++){
if(s1.charAt(j)=='0') sb.append("1");
else if(s1.charAt(j)=='1') sb.append("0");
}
s1 = sb.toString();

/*
for(int j=0;j<s1.length();j++)
{
if(s1.charAt(j)==0)
{
s1.replace(s1.charAt(j),'1');
}
else
{
s1.replace(s1.charAt(j),'0');
}

}
*/
System.out.println(s1);

int decimal=0;
int k=0;
for(int m=s1.length()-1;m>=0;m--)
{
// you don't want the char code here but the int value of the char code
//decimal += (s1.charAt(m) * Math.pow(2, k));
decimal+=(Character.getNumericValue(s1.charAt(m))*Math.pow(2, k));

k++;
}
return decimal;
}

附加说明:不要大于 MAX_BITS = 31,否则您需要在方法中使用 long 而不是 int。

关于java - 将十进制数转换为其补码的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34448675/

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