4

10進数を2進数に変換したい。それらを配列に格納したいと思います。まず、2進数を格納できるように、特定の長さの配列を作成する必要があります。その後、変換を実行します。これを行う方法は次のとおりです。

public class Aufg3 {
    public static void main(String[] args) {
        int[] test = decToBin(12, getBinArray(12));
        for(int i = 0; i < test.length; i++){
            System.out.println(test[i]);
        }
    }

    public static int[] getBinArray(int number){
        int res = number, length = 0;
        while(res != 0){        
            res /= 2;
                    length++;
        }
        return new int[length];
    }

    public static int[] decToBin(int number, int[] array){
        int res = number, k = array.length-1;
        while(res != 0){
            if(res%2 == 0){
                array[k] = 0;
            }else{
                array[k] = 1;
            }
            k--;
            res /= 2;
        }
        return array;
    }
}

改善すべき点はありますか?12の入力に対して1100を出力する必要があります。

4

4 に答える 4

6

IntegerクラスのtoBinaryStringメソッドを使用しないのはなぜですか。

System.out.println(Integer.toBinaryString(12))
于 2010-11-11T19:33:41.120 に答える
3

独自のコードを記述したいと思います。それ以外の場合、これは標準のJavaライブラリのメソッドを使用して簡単に実行できます。

いくつかの簡単なコメント:

  • resあなたは一時的な変数を取り除くことができます。直接作業しますnumber(Javaはパラメーターを値で渡すことに注意してください)。
  • コンパイラはとにかくこれを最適化できるはずですが、シフトは除算よりも効率的です(number >>>= 1の代わりに)number /= 2
  • decToBinあなたがするだけなら、あなたはモジュラスを避けることができますarray[k] = number & 1;
  • そこにいる間、直接電話getBinArrayしてみませんか?次に、変換する値である1つの引数のみを使用してdecToBin呼び出すことができます。decToBin

コードのわずかに最適化されたバージョンは次のとおりです。

public static int[] getBinArray(int number) {
    int length = 0;
    while (number != 0) {
        number >>>= 1;
        length++;
    }
    return new int[length];
}

public static int[] decToBin(int number) {
    int[] array = getBinArray(number);
    int k = array.length-1;
    while (number != 0)
    {
        array[k--] = number & 1;
        number >>>= 1;
    }
    return array;
}
于 2010-11-11T19:34:21.547 に答える
2

これが宿題でない場合は、自分で行う必要はありません。次のコードが機能するはずです。

BigInteger bigInt = new BigInteger(number);
String asString = bigInt.toString(2);

より効率的な方法があるかもしれませんが、これは確かに非常に読みやすく、保守可能です。

于 2010-11-11T19:33:53.447 に答える
1

改善できる小さなことがいくつかあります。

  • intをに変換する「高レベル」メソッドを定義する必要がありますint[]。現在のコードでは、2回言及する必要がありますが12、これは悪いことです。
  • do { ... } while (number != 0)ループを使用する必要があります。それ以外の場合、番号0は空の配列で表されます。
  • 負の数を正しく処理するため、x >>> 1の代わりにを使用する必要があります。x / 2
  • コードが正しいことを確認したい場合は、バイナリからに変換する別のメソッドを記述してくださいint。次に、それを確認できますbinToDec(decToBin(12, ...)) == 12
  • これは単なるヘルパーメソッドであるため、メソッドは、であってはgetBinArrayなりません。をpublic置き換えるか、単に削除することができます。publicprivatepublic
于 2010-11-11T19:49:48.840 に答える