2

43.62のような10進数を2進数に変換する必要があります。そこで、私は最初に43をバイナリに変換する基本的なプログラムを作成しました。しかし、私のプログラムは2進数を逆に出力するので、1 0 1 011.の代わりに110 101を出力することに気付きました。これを修正するにはどうすればよいですか。

私のコード:

#include <iostream>

using namespace std;

int main()
{
    int number;
    int remainder;

    cout << "Enter a integer: ";
    cin >> number;

    while(number != 0)
    {
        remainder = number % 2;
        cout << remainder << " ";
        number /= 2;
    }

    int pause;
    cin >> pause;

    return 0;
}
4

9 に答える 9

3

各桁を cout に送信する代わりに、それらを配列に送信します。次に、逆の順序で配列を読み取ります。または、それらをスタックにプッシュしてから、スタックからポップします。または...

于 2011-10-20T15:53:27.863 に答える
3

ナットを割る大ハンマーのようなものですが、再帰的アプローチに基づくソリューションを次に示します。

#include <iostream>
using namespace std;

void OutputDigit(int number)
{
    if (number>0)
    {
        OutputDigit(number /= 2);
        cout << number % 2 << " ";
    }
}

int main()
{
    OutputDigit(43);
    return 0;
}

1行を上に移動するだけで、以前と同じ出力を得ることができますcout!

于 2011-10-20T16:00:54.110 に答える
1

vector残りをすぐに印刷する代わりに保存することがどのように役立つかを見て考えてください。

ベクトルの最後に物を置く必要がないことに注意してください。 vector::insert位置を指定できます...それは役に立ちますか?

または、作成したアルゴリズムを最下位桁から開始します。代わりに最上位桁から開始する方法はありますか? 数字が 42 ( 0101010) の場合、最上位桁は 32 を表し、その前の 0 は 64 を表します。42 から 32 を引くとどうなりますか?

于 2011-10-20T16:00:44.703 に答える
0

余りを保持してこのような変換を行うと、結果は常に元に戻ります。提案された使用法としてbitwise &

unsigned char bit = 0x80; // start from most significant bit
int  number = 43;
while(bit)
{
    if( bit & number ) // check if bit is on or off in your number
    {
       cout << "1";
    }
    else
    {
       cout << "0";
    }
    bit = bit >>1; // move to next bit
}

この例では、数値の8ビットすべてを調べ始め、ビットがオンかオフかを確認して、それに応じて出力します。

于 2011-10-20T16:07:14.443 に答える
0

文字列関数を使用するだけ

string s ;

while(number != 0)
{
    remainder = number % 2;
    string c = remainder ? "1": "0";
    s.insert(s.begin(),c.begin(),c.end());
    number /= 2;
}
于 2011-10-20T16:06:13.133 に答える
0

結果を保存してから逆方向に印刷する方が簡単です。再帰を使用することも、まさにそれを行う別の可能性です。

于 2011-10-20T15:53:48.853 に答える
0

最上位ビットが最初:

const unsigned int BITS_PER_INT = CHAR_BIT * sizeof(int);
char bit_char = '0';
for (int i = BITS_PER_INT - 1;
     i > 0;
     --i)
{
    bit_char = (value & (1 << i)) ? '1' : '0';
    cout << bit_char << ' ';
}
cout << '\n';
cout.flush();

最下位ビットを最初に出力するには、forループの方向を変更します。

于 2011-10-20T16:01:54.053 に答える
0

C++ では、ビットセット コンテナーを使用してこれを行うこともできます。

#include <bitset>

int i = 43;
std::bitset<sizeof(int)*CHAR_BIT> bin(i);
于 2011-10-20T16:02:08.950 に答える