-3

一連の 2 進数を出力しようとしていますが、次の一連の 2 進数は前の一連の 2 進数に依存します。これらのシリーズのいくつかは、1 つ以上のゼロで始まります。int変数しか使えません。

したがって、プログラムが で始まる場合0、次の出力は になり01ます0110。int がゼロで始まる場合、先行ゼロをハードコーディングする必要がありますか、それともこれを行う別の方法はありますか?

また、Integer.toBinaryString()数値をバイナリに出力する唯一の方法はありますか?

4

4 に答える 4

3

出力をフォーマットするだけです。構文は意味がありません。なぜなら、の値が01is1であるためです。コンパイラは値を数字のシーケンスとしてではなく、数値として格納するだけです。試してみてください:

int x = 1;
System.out.printf("%02d", x);

より正確には、先頭に 0 を配置すると、数値リテラルは 8 進数 (基数 8) として解釈されます。したがって、問題はありません0108、違法になります (8 は有効な 8 進数ではないため)。これは、多くのプログラミング言語に当てはまります。

いずれにせよ、数値リテラルと数値を混同しないでください。コンパイラはリテラルを値に変換し、その値だけが実行時に効果的に使用されます。

于 2012-11-27T18:02:05.037 に答える
2

問題が本当に単純な場合は、次のことを試してみてください。

System.out.print("0"+x);

ご存知かもしれませんが、integer には値が格納されます。画面に出力されるものは文字列に変換されます。整数は、先行ゼロのない文字列に変換されます。

ちなみに、数値定数を 0 で始める場合、Java では 8 進数を指定していることを意味します。

推奨される読み物: Java リテラル

ただし、特定の形式で数値を出力する必要があるなど、問題がより深い場合は、DecimalFormatを必ずお読みください。

System.out.println(new DecimalFormat("00").format(x)); 
于 2012-11-27T17:59:43.377 に答える
1

この型intは整数値を格納するだけで、それ以上のものは格納しません。int変数には、先頭のゼロも、数値が入力された基数も格納されません。あなたの場合、先頭のゼロは8進数リテラルを意味しますが、これはおそらくあなたが意図したものではありません。

先頭のゼロを保存する場合は、別のアプローチを使用する必要があります。たとえば、提案したように文字列を使用します。

于 2012-11-27T18:00:36.933 に答える
-6

私の知る限り、いいえ、Java は不要な 0 を削除して RAM の使用を節約しようとするためです。最善の方法は、それを文字列に作成し、文字列整数を文字列整数で時間、追加、削除、除算できるメソッドを作成することです(「いいえ」を回してから、0を最初に読み込んでください)。

編集

public String addStringInteger(String x1, Integer i){
    String leading0 = "";
    String nol = "";
    boolean onLeading = true;
    for(char c : x1.toCharArray()){
        String l = Character.toString(c);
        if(onLeading && l.equals("0")){
            leading0 += "0";
        }else{
            onLeading = false;
            nol += l;
        }
    }
    int intO = Integer.parseInt(nol) + i; //you can change + to x, -, / etc
    return leading0 + ""+ intO;
}

この例では addStringInteger("001", 20) を実行できるようになり、0021 が返されます。メソッドを編集して 021 を返すことができますが、簡単な例として、この種のメソッドで何でも実行します。

于 2012-11-27T18:03:29.427 に答える