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

标签 java if-statement for-loop binary

我想给出一个数字的二进制代码。下面的代码确实给出了一个“二进制代码”,但是他做的顺序错了。例如,当我想打印 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/

相关文章:

javascript - 动态创建的 HTML 表格打开新页面

java - 如果配置文件不在当前目录中,MaltParser 无法找到配置文件

java - 在子类测试之前从 JUnit 基类运行测试

java - 将符号从 for 循环传递到 if 语句

javascript - AngularJS Controller 中基于值的重定向

java - 不显示表达式语言的值

java - GWT,如何为 @DefaultStringArrayValue 消息制作 i18n

java - 为什么我的 PrimeFaces 上传工具不起作用?

java - 如何在 Java 的 if 语句中使用 "or"而无需重新输入整个表达式?

PHP 嵌套 for 循环 - 金字塔形状