クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

論理回路の出力を求める(論理ゲート)

このレッスンのあとで: 論理回路の出力を求めることができる。

50分のレッスンコマンド3件コンパイラとアーキテクチャのラボ:gcc、flex、bison、RISC-V を1台の VM で

電子レンジはいつ動くのか

コンビニの電子レンジは、「温め」ボタンか「解凍」ボタンを押すと動き出します。ただし、扉が開いているあいだは決して動きません。

このような決まりは、「はい」か「いいえ」を受け取る小さな部品を組み合わせて作ります。レンジの中のプロセッサは、その部品が何百万個も集まったものです。

このレッスンのゴール

メモ

論理回路の出力を求めることができる。

キーワード

ことばいみれい
論理ゲート入力のビットから、出力のビットを1つ作る小さな部品
入力ゲートに入るビット
出力ゲートが出すビット
真理値表すべての入力と、その出力を並べた表
論理式回路を AND、OR、NOT などの言葉で書いたものA AND B
半加算器2つのビットを足す回路

学生が入力するセルは、このプレビューでは空白です。

基本の3つのゲート

1は「はい」やオン、0は「いいえ」やオフを表します。

AND ゲートは、2つの入力がどちらも1のときだけ1を出します。OR ゲートは、少なくとも1つの入力が1なら1を出します。NOT ゲートは入力が1つで、それを反転します。NAND は AND のあとに NOT、NOR は OR のあとに NOT をつないだものです。

AND と OR の真理値表

ABA AND BA OR B
0000
0101
1001
1111

学生が入力するセルは、このプレビューでは空白です。

始める前に

メモ

上のバーの Start the lab を押し、マシンが動き出すまで待ってください。Run ボタンは、順番にコマンドをマシンのターミナルに入力します。

Python とシェルにもゲートがある

Python とシェルでは、& が AND、| が OR、^ が XOR です。XOR は、2つの入力がちがうときに1を出します。

2つの整数にこれらを使うと、同じけたのビットどうしに、けたごとにゲートが働きます。

ビットの組ごとに OR を求める

コマンド
python3 -c "print(0 | 0, 0 | 1, 1 | 0, 1 | 1)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

6と3に3つのゲートを使う

コマンド
echo $(( 6 & 3 )) $(( 6 | 3 )) $(( 6 ^ 3 ))

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

例: 6と3にゲートを使う

ビット10進数
61106
30113
6 AND 30102
6 OR 31117
6 XOR 31015

学生が入力するセルは、このプレビューでは空白です。

回路を論理式として読む

ゲートはつなぐことができます。1つのゲートの出力が、次のゲートの入力になります。回路は論理式で Q = (A OR B) AND (NOT C) のように書きます。

計算と同じように、かっこの中を先に求め、それからかっこどうしをつなぐゲートを求めます。入力が3つなら、真理値表は8行です。

例: この回路の真理値表

ABCA OR BNOT CQ
000010
001000
010111
011100
100111
101100
110111
111100

学生が入力するセルは、このプレビューでは空白です。

2つのゲートで2つのビットを足す

2進数では、1 + 1 は 10 です。0を書いて、1をくり上げます。半加算器は、これを2つのゲートで行います。

和のビットは A XOR B、くり上がりのビットは A AND B です。この足し算器をつなげたものが、プロセッサの中で整数を足しています。

1 + 1 の和とくり上がり

コマンド
python3 -c "print(1 ^ 1, 1 & 1)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

OR を「どちらか一方だけ」の意味だと考える人がよくいます。論理の OR は、2つの入力がどちらも1のときにも1を出します。「どちらか一方だけ」を表すゲートは XOR です。

さらに挑戦: 3つのビットを足す

半加算器は2つのビットを足します。長い数を足すには、各けたで右のけたからのくり上がりも足す必要があります。それが全加算器で、半加算器2つと OR ゲート1つで作れます。

1 + 1 + 1 と 0 + 1 + 1 の、和のビットとくり上がりのビットを手で求めてください。

このラボとソースについて: コンパイラとアーキテクチャのラボ:gcc、flex、bison、RISC-V を1台の VM で

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。