gpt4 book ai didi

java - 顺序错误的二进制代码 - 如何正确移动它?

转载 作者:行者123 更新时间:2023-11-29 04:37:43 25 4
gpt4 key购买 nike

我想给出一个数字的二进制代码。下面的代码确实给出了一个“二进制代码”,但是他做的顺序错了。例如,当我想打印 1 的二进制代码时,它会打印“10000000”而不是“00000001”。我认识到将任何数字乘以 2 会将二进制代码向左移动。例如,数字 5 的二进制代码为“00000101”,数字 10 的二进制代码为“00001010”,依此类推。我考虑过使用这种机制,但还没有想到正确的想法。

for (int j = 0; j <= 7; j++) {

if (x % 2 == 0) {
IO.print(0);
}
else {
IO.print(1);
x = x / 2;
}
}

最佳答案

嗯,有两种方式 - 和往常一样。第一个:

System.out.println(Integer.toBinaryString(x));

第二个:

StringBuilder sb = new StringBuilder();
while (x > 0) {
sb.append(x%2);
x = x/2;
}
sb.reverse();
System.out.println(sb.toString());

好的,让我向您介绍StringBuilder。这是一个有效附加构建 String 的类,可以随时使用 toString() 方法返回。附加发生在 append() 中,它可以将任何原语作为参数以及 String

上面的代码说:

  1. 创建新的 StringBuilder
  2. 只要数字仍然大于 0,就附加 String x%2。
  3. 现在,由于您的 String 与当前解决方案中的完全相同,因此您必须将其反转。它也由 StringBuilder 提供。
  4. 简单地打印 sb.toString() 这是您刚刚构建的字符串。

我可以看到,您假设该数字最多为 8 位。如果是这样,您可以将 StringBuffer 替换为 char[8],填充它然后向后读取。

char[] buff = new char[8];
for (int j = 0; j <= 7; j++) {
buff[j] = x%2;
x=x/2;
}

boolean onePrinted = false;
for (int j = 7; j>=0; j--) {
if (onePrinted) {
IO.print(buff[j]);
} else if (buff[j] == 1) {
IO.print(buff[j]);
onePrinted = true;
}
}
if (!onePrinted) {
IO.print(0);
}

好的,更简单的方法可以满足 OP 的特殊要求。

int countZeros = 0;
while (x%2 == 0) {
x = x/2;
countZeros++;
}
int temp = 0;
while (x>0) {
temp = temp*2;
temp += x%2;
x = x/2;
}
while (temp > 0) {
System.out.print(temp%2);
temp = temp/2;
}
for (int i = 0; i < countZeros; i++) {
System.out.print(0);
}

关于java - 顺序错误的二进制代码 - 如何正确移动它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40563074/

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