1. ホーム
  2. c++

[解決済み】数値を2進数で表示(coutを使用)するには?

2022-04-03 16:25:04

質問

私は大学でOSについての講義を受けていて、2進数から16進数、10進数から16進数などへの変換方法を学んでいますが、今日はちょうど符号付き/符号なし数字が2の補数(~数字+1)を使ってメモリに格納される方法を学びました。

紙で行う演習がいくつかあるので、先生に提出する前に自分の答えを確認できるようにしたいです。最初の数回の練習問題ではC++のプログラムを書きましたが、今は次の問題でどうやって自分の答えを検証したらよいか行き詰っています。

char a, b;

short c;
a = -58;
c = -315;

b = a >> 3;

そして、バイナリ表現を表示する必要があります メモリ内 a , bc .

紙の上でやってみたところ、次のような結果が得られました(2の補数以降の数字のメモリ上の2進数表現はすべて)。

a = 00111010 (charなので1byte)

b = 00001000 (文字なので1バイト)

c = 11111110 11000101 (ショートなので、2バイト)

私の答えを確認する方法はありますか?それとも、各ステップを自分でコーディングしなければならないのでしょうか(2の補数を計算し、バイナリに変換する)?後者はそれほど時間がかからないと思いますが、そうするための標準的な方法があるのかどうか気になります。

どのように解決するのですか?

最も簡単な方法は、おそらく std::bitset を表す値にストリーミングし、それを cout .

#include <bitset>
...

char a = -58;
std::bitset<8> x(a);
std::cout << x << '\n';

short c = -315;
std::bitset<16> y(c);
std::cout << y << '\n';