Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二进制代码顺序错误-如何正确移位?_Java_If Statement_For Loop_Binary - Fatal编程技术网

Java 二进制代码顺序错误-如何正确移位?

Java 二进制代码顺序错误-如何正确移位?,java,if-statement,for-loop,binary,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) {

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

对于(int j=0;j嗯,通常有两种方法。第一种:

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()
中,它可以将任何原语作为参数以及
字符串

上面的代码说:

  • 创建新的
    StringBuilder
  • 只要数字仍然大于0,就添加
    字符串
    x%2
  • 现在,由于
    字符串与当前解决方案中的字符串完全相同,因此必须将其反转。它也是由
    StringBuilder
    提供的
  • 只需打印您刚刚构建的字符串
    sb.toString()
  • 我可以看出,您假设该数字最多有8位。如果是这样,您可以用
    char[8]
    替换
    StringBuffer
    ,填充它,然后向后读取

    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);
    }
    
    char[]buff=新字符[8];
    对于(int j=0;j=0;j--){
    如果(打印一份){
    IO.print(buff[j]);
    }else if(buff[j]==1){
    IO.print(buff[j]);
    onePrinted=true;
    }
    }
    如果(!onePrinted){
    IO.打印(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);
    }
    
    int countZeros=0;
    而(x%2==0){
    x=x/2;
    countZeros++;
    }
    内部温度=0;
    而(x>0){
    温度=温度*2;
    温度+=x%2;
    x=x/2;
    }
    而(温度>0){
    系统输出打印(温度%2);
    温度=温度/2;
    }
    对于(int i=0;i
    用于(int j=7;j>=0;--j){
    
    如果(x&(1)我们还没有在大学里介绍这两种方法中的任何一种。一定有一种方法可以只使用for-and-while循环和if-else-conditionals来实现这一点。所以现在是开始使用它的好时机!我强烈建议你在大学里学习更多,否则你会遇到麻烦。我仍然想知道是否还有其他方法可以做到这一点它只需要一些基本的工具。这是一项更大任务的一部分,也是我最后一项没有弄好的任务。@Julian我给了你一个仅使用原语的解决方案,但是如果你想这样写,只需切换到C或汇编即可。:)如果我的答案解决了你的问题,请点击答案下方的灰色勾号,将其标记为已接受。Upvote也将受到欢迎。我恐怕他不能使用它:如果你不能使用库,也不能用原语计算,那么你根本不能做。我已经找到了只使用原语的算法,但我希望我知道是什么e加入。我想申请一个教授职位。那很好,谢谢!不过我还是要明白为什么D@xenteros:不,我可以用的那个。:-)
    for (int j = 7; j >= 0; --j) {
        if ((x & (1 << j)) != 0) {
            IO.print("1");
        } else {
            IO.print("0");
        }
    }