コンピュータ内部のデータ表現
高校生の健太さんと結衣さんは、コンピュータが内部でどのように情報を扱っているかについて話している。
健太:「コンピュータは、すべての情報を と の並び、つまり2進数で扱っているんだ。例えば、8 ビット(8桁)の 2進数 11010101 があるとしよう。これは 10 進数に変換できるはずだ。」
結衣:「なるほど。でも、マイナスの数(負の数)はどうやって表現するの?」
健太:「良い質問だね。多くのコンピュータでは、8 ビットのデータの場合、**2 の補数(ほすう)**という表現方法が使われるよ。例えば、-3 を 8 ビットの 2 の補数で表現するには、まず +3 の 8 ビット 2進数 00000011 を用意するんだ。」
【2の補数の作り方】
00000011)の と をすべて反転させる。(→ 11111100)11111101)
これで、11111101 が -3 を表す 2 の補数表現になるんだ。健太:「そして、こうした や の計算は、**論理回路(ロジックゲート)**と呼ばれる電子部品が組み合わさって実行されているんだ。基本となるのは(表1)の3つの演算だよ。」
表1:基本論理演算の真理値表
| AND (論理積) | 0 | 1 |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| (入力Aと入力Bが両方とも 1 のときだけ 1 になる) |
| OR (論理和) | 0 | 1 |
|---|---|---|
| 0 | 0 | 1 |
| 1 | 1 | 1 |
| (入力Aと入力Bの少なくとも一方が 1 のとき 1 になる) |
| NOT (論理否定) | ||
|---|---|---|
| 0 | 1 | |
| 1 | 0 | |
| (入力を反転させる) |
健太:「この3つを組み合わせて、複雑な計算ができる。例えば(図1)のような回路を考えてみよう。A と B の2つの入力と、1つの出力 X がある。」
図1:論理回路
┌───[AND (①)]───┐
A ───┤ ├─[OR (③)]─── X
│ │
B ───┤ │
│ │
└────[NOT (②)]───┘
Alt: AとBを入力する論理回路図。AとBはANDゲート(1)に入力される。BはNOTゲート(2)にも入力される。ゲート(1)とゲート(2)の出力は、ORゲート(3)に入力され、Xとして出力される。
結衣:「この回路の入力 A と B に や を入れたとき、出力 X がどうなるか、計算できそうね。」
シナリオの冒頭で健太さんが言及した、8 ビットの 2進数 11010101 を 10 進数に変換した値はいくつか。
その値を整数で答えよ。
ヒント: 整数で答えよ
シナリオで説明された【2の補数の作り方】に従って、-5 を 8 ビットの 2 の補数で表現した場合、最も適切なものを次のA〜Dのうちから一つ選べ。
図1 の論理回路について、入力 A に 1、入力 B に 0 を与えたとき、出力 X はいくつか。
その値を か の整数で答えよ。
ヒント: 整数で答えよ
図1 の論理回路全体(A と B を入力し X を出力する)と、論理的に**等価な(全く同じ真理値表になる)**演算はどれか。最も適切なものを次のA〜Hのうちから一つ選べ。
(※ A NAND B は NOT (A AND B)、A NOR B は NOT (A OR B)、A XOR B は「AとBが異なれば1、同じなら0」とする)