0

このコードのビットを理解したかっただけです。

static int convert2binary(int Decimal)
{
    int remainder, final = 0;
    string result = "";
    bool NaN;

    while (Decimal > 0)
    {
        remainder = Decimal % 2;
        Decimal /= 2;
        result = remainder + result;
        NaN = int.TryParse(result, out final);
    }
    return final;
}

これはバイナリ コンバーターですが、正確にはどのように機能しますか? モジュラス、10 進数 /= 2 が得られず、それらを両方足すと、どうやって 2 進数になるのでしょうか?

4

3 に答える 3

3

データを入力してみましょう。

convert2binary(10)
-> remainder, final = 0
-> result = ""
-> NaN (= false)

loop:
Decimal > 0, so: remainder = Decimal % 2 (= 0) and Decimal /= 2 ( = 5)
result = remainder + result = 0 + ""
NaN = false
repeat:
Decimal > 0, so: remainder = Decimal % 2 (= 1) and Decimal /= 2 ( = 2)
result = remainder + result = "10"
NaN = false
repeat:
Decimal > 0, so: remainder = Decimal % 2 (= 0) and Decimal /= 2 ( = 1)
result = remainder + result = "010"
NaN = false
repeat:
Decimal > 0, so: remainder = Decimal % 2 (= 1) and Decimal /= 2 ( = 0)
result = remainder + result = "1010"
NaN = false
repeat: WHOOPS: Decimal == 0, so we return the final (int representation) of result.

では、なぜこれが機能するのでしょうか。

基本的に、反復ごとに、数字の右側から最後の 2 進数を分割します (これが%2ビットです)。残りを 2 (/=2ビット) で割るので、これをループで実行できます。

各反復により、数値多項式の連続した位置が得られます。

decimal(10) == 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0 = binary(1010)

他の方向にも行くことができます:int.ToString()数値の 10 進数の変形を出力するメソッドを書きたい場合は、最後の桁を% 10(数値を 10 で割った余り) で分割します。印刷するほとんどの桁。残りを 10 で割ると、10 の位、100 の位などについて繰り返すことができます。

これを試してみましょう!

int number = 123;
// this is equivalent to: (1 * 10^2) + (2 * 10^1) + (3 * 10^0)
int remainder = number % 10; // remainder = 3
number /= 10 // number = 12 (integer division!!)
result = remainder + ""; // result = "3"
// number is now: (1 * 10^1) + (2 * 10^0), because we divided by 10!
remainder = number % 10; // remainder = 2
number /= 10 // number = 1
result = remainder + result; // result = "23"
// number is now: (1 * 10^0)
remainder = number % 10; // remainder = 1
number /= 10 // number = 0 - we're going to STOP now!
result = remainder + result; // result = "123"
// yay! hurray!!

つまり、数体系 (2 進数、8 進数、10 進数、16 進数など) は、基数の累乗の多項式を書き留めるための省略形にすぎません。右端の桁は常に基数 ^0 で、指数は左に移動する桁ごとに 1 ずつ増加します。

小数点の意味がわかればボーナスポイント ;)

于 2012-04-17T14:26:51.620 に答える
0

10 進数と 2 進数を変換する場合、各 2 進数は 10 進数では 2 のべき乗であることに注意してください。

100110 = 1*2^5 + 0*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 0*2^0 = 38

したがって、整数からバイナリ文字列を作成するには、右から始めます。

  • 10 進数と 2 のモジュラスを取得します (残りの数を 2 で割った値)
  • 結果をバイナリ文字列の左側に追加します
  • 数字を 2 で割ります
  • 番号全体が処理されるまで繰り返します

最後にその文字列を数値に変換します。

于 2012-04-17T14:34:30.817 に答える
0

このページの 2 番目の方法を参照してください: http://www.wikihow.com/Convert-from-Decimal-to-Binary

これが、アルゴリズムがやろうとしていることです。

于 2012-04-17T14:25:00.703 に答える