0

私はJavaでこの問題を解決し、使用しましInteger.toBinaryString()たが、そのような関数はc ++では使用できません(私の知る限り)

私はこの関数を作成しました、そしてそれは完全に機能します、しかし私はそれがなぜ機能するのか混乱しています、どんな助けも大いに感謝されます

void decimalToBinary (int number)
{
    int remainder;
    if (number <= 1)
    {
        cout << number;
        return;
    }
    remainder = number % 2;
    decimalToBinary(number >> 1);
    cout << remainder;
}

理解する上での私の主な問題は再帰呼び出しですが、なぜnumber >> 1そこに必要なのですか?

これは、最初に呼び出されたときに数値を使用し、それが<= 1であるかどうかをチェックするためです。その場合は、数値(0/1)を出力して関数を終了します。それ以外の場合は、数値を取得して、2で割った余りを取得します( 1/0)次に、関数を再度呼び出します。number >> 1

再帰呼び出しではnumber >> 1、整数ex 1234から終了番号が123になることを意味しますか?

4

2 に答える 2

1

これ>>は、2 で除算するのと同じ効果があります。

数値は 2 進数として格納されるため、右に 1 ビット シフトするとそのビットが押し出され、10 進数を右に 1 だけシフトするのと同じように、数値を 2 で割る効果があります。それを10で割ります。

同じ効果で除算を使用できます。

于 2013-03-07T14:45:53.730 に答える
0

>> 演算子は基本的に、引数として指定された回数だけビットを右にシフトします。これは基本的に、数値を引数の 2 乗 (x/2^n) で除算することと同じです。10 進数を 2 進数に変換するには、割り算ができなくなるまで (この場合は 1 未満になるまで) 数値を再帰的に 2 で割る必要があります。事実上、取得したい2進数。

于 2013-03-07T14:50:38.817 に答える