我想给出一个数字的二进制代码。下面的代码确实给出了一个“二进制代码”,但是他做的顺序错了。例如,当我想打印 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
。
上面的代码说:
- 创建新的
StringBuilder
。 - 只要数字仍然大于 0,就附加
String
x%2。 - 现在,由于您的
String
与当前解决方案中的完全相同,因此您必须将其反转。它也由StringBuilder
提供。 - 简单地打印
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/