34
基礎情報処理 論理 (スイッチング) 回路と計算

基礎情報処理 - Kyoto Ususumu/lecture/digital11.pdf+ 1 1 0 1 1 1 1 0 34 の2の補数表現 1 無視 1 0 1 1 1 1 1 1 非負数と思って足し算 = 191 JJ J 基礎情報処理

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • 基礎情報処理

    論理 (スイッチング)回路と計算

  • もくじ

    � 2進数表現

    � 2進数の計算

    � 論理回路による実現

    JJ J 基礎情報処理 —論理回路と計算— I II Page 2

  • 2進数表現

    JJ J 基礎情報処理 —論理回路と計算— I II Page 3

  • 真偽値

    0 = 偽

    1 = 真

    JJ J 基礎情報処理 —論理回路と計算— I II Page 4

  • 自然数

    � 1と 0を並べて2進数で表現する

    13 = 8+4+1

    = 23 ×1+22 ×1+21 ×0+20 ×1

    = 1101 (2進数表現)

    � 一般形bn−1bn−2 · · ·b0 (bn−1, · · · ,b0 ∈ {0,1})

    = 2n−1 ×bn−1 +2n−2 ×bn−2 + · · ·+20 ×b0

    � n桁の2進数のことを、n bit(ビット)の2進数という

    JJ J 基礎情報処理 —論理回路と計算— I II Page 5

  • 2進数の性質

    � n桁の2進数で表せる自然数n︷ ︸︸ ︷

    00 · · ·0 = 0 からn︷ ︸︸ ︷

    11 · · ·1 = 2n −1 まで

    � 奇数、偶数の判定最下位桁が 1なら奇数、0なら偶数

    � 2k倍、1/2k倍I 2k

    bn−1 · · ·b0

    −→ bn−1 · · ·b0k︷ ︸︸ ︷

    0 · · ·0 左シフト

    I 1/2k

    bn−1 · · ·bkbk−1 · · ·b0

    −→k︷ ︸︸ ︷

    0 · · ·0bn−1 · · ·bk 右シフトJJ J 基礎情報処理 —論理回路と計算— I II Page 6

  • 2進数の計算

    JJ J 基礎情報処理 —論理回路と計算— I II Page 7

  • 2進数の計算

    � コンピュータが扱える数は有限桁のもののみ

    � ここでは、8bitの2進数を考える

    JJ J 基礎情報処理 —論理回路と計算— I II Page 8

  • 1桁の2進数の足し算

    0 + 0 = 0

    0 + 1 = 1

    1 + 0 = 1

    1 + 1 = 10

    JJ J 基礎情報処理 —論理回路と計算— I II Page 9

  • 2進数の足し算

    1 0 1 1 1 1 0 1

    + 0 0 0 1 0 1 1 0

    1 1 0 1 0 0 1 1

    JJ J 基礎情報処理 —論理回路と計算— I II Page 10

  • 2進数の引き算

    1 1 1 0 0 0 0 1

    − 0 0 1 0 0 0 1 0

    1 0 1 1 1 1 1 1

    JJ J 基礎情報処理 —論理回路と計算— I II Page 11

  • 負数の表現

    34の2の補数表現

    34 = 0 0 1 0 0 0 1 0

    −→ 1 1 0 1 1 1 0 1 ビット反転

    −→ 1 1 0 1 1 1 1 0 +1

    = 34の2の補数表現 = –34の表現

    JJ J 基礎情報処理 —論理回路と計算— I II Page 12

  • 2の補数表現を用いた引き算

    � 225–34 = ?225−34 = 225+(−34)を計算する

    1 1 1 0 0 0 0 1

    + 1 1 0 1 1 1 1 0 34の2の補数表現

    1無視

    1 0 1 1 1 1 1 1 非負数と思って足し算

    = 191

    JJ J 基礎情報処理 —論理回路と計算— I II Page 13

  • 2の補数表現でなぜうまく行くのか?

    2進数表現 b7 b6 b5 b4 b3 b2 b1 b0

    2の補数表現 b7 b6 b5 b4 b3 b2 b1 b0 + 1 (bは bit bの反転)

    b7 b6 b5 b4 b3 b2 b1 b0 + (b7 b6 b5 b4 b3 b2 b1 b0 + 1)

    = (b7 b6 b5 b4 b3 b2 b1 b0 + b7 b6 b5 b4 b3 b2 b1 b0) + 1

    = 11111111 + 1

    = 100000000

    � 最上位 bitの 1を無視すれば、(2進数表現)+(2の補数表現)=0I 2の補数表現はもとの2進数表現の負数

    JJ J 基礎情報処理 —論理回路と計算— I II Page 14

  • 剰余類と2の補数

    � コンピュータが扱う整数は通常のものとは異なるI 限られた範囲しか扱わない (例: n bit2進数の場合 0以上 2n −1以下)

    � コンピュータが扱うのは整数そのものでなく剰余類I aは bとmodulo mで合同

    a ≡ bmodm

    意味: k ∈ Zが存在して a−b = km (a÷ mと b÷ mの余りは等しい)

    I aのmod mでの剰余類a+mZ = {b | a ≡ bmodm} (= {a+mk | k ∈ Z})

    定理: 剰余類は足し算および引き算について閉じている。すなわち、a ≡ bmodmかつ c ≡ d modmならば、a+ c ≡ b+d mod m, a− c ≡ b−d mod mが成り立つ。

    JJ J 基礎情報処理 —論理回路と計算— I II Page 15

  • 剰余類と2の補数

    � 「剰余類は足し算および引き算について閉じている」=⇒同じ剰余類に属する整数は交換可能

    例: m = 28(= 256)のとき、· · ·

    (−1)+28Z= {· · · ,−513,−257,−1,255,511, · · ·},

    0+28Z= {· · · ,−512,−256,0,256,512, · · ·},

    1+28Z= {· · · ,−511,−255,1,257,513, · · ·},

    2+28Z= {· · · ,−510,−254,2,258,514, · · ·},

    · · ·

    ∴ 2−1 ≡ 2+(−1)≡ 2+255 ≡ 257 ≡ 1 (mod 28)

    JJ J 基礎情報処理 —論理回路と計算— I II Page 16

  • 2の補数表現 =剰余類の表現

    最上位 bitの 1を無視 = 28(= 256)で割った商は無視して剰余だけをとる

    bit列 2進表現 n 剰余類 n+28Z 2の補数

    00000000 0 {· · · ,−256,0,256, · · ·} +0 ←2進表現と一致

    00000001 1 {· · · ,−255,1,257, · · ·} +1 ←2進表現と一致...

    ......

    ...

    01111111 127 {· · · ,−129,127,383, · · ·} +127 ←2進表現と一致

    10000000 128 {· · · ,−128,128,384, · · ·} −128

    10000001 129 {· · · ,−127,129,385, · · ·} −127...

    ......

    ...

    11111111 255 {· · · ,−1,255,511, · · ·} −1

    ※ 各 bit列について、対応する剰余類のどの元を選んでもよかったが、2の補数が最も合理的な選択

    JJ J 基礎情報処理 —論理回路と計算— I II Page 17

  • 2の補数表現の性質

    � nbitの2の補数表現で表せる整数の範囲

    1

    n−1︷ ︸︸ ︷0 · · ·0 = −2n−1 から 0

    n−1︷ ︸︸ ︷1 · · ·1 = 2n−1 −1 まで

    � 非負の数の表現は通常の2進数表現と一致

    � 正負の判定最上位 bitが 1ならば負の数、0ならば非負の数

    � 奇数、偶数の判定最下位桁が 1なら奇数、0なら偶数

    JJ J 基礎情報処理 —論理回路と計算— I II Page 18

  • 2種類の数の表現

    符号なし (unsigned)整数 符号つき (signed)整数

    解釈 単純な2進数表現 2の補数表現

    用途 非負整数のみ 正負の整数

    整数の範囲 0以上 2n −1以下 −2n−1以上 2n−1 −1以下

    � 同じ bit列でも異なる整数と解釈できる。例えば、bit列 11011110は、I 符号なし整数としては、222、符号つき整数としては、–34

    JJ J 基礎情報処理 —論理回路と計算— I II Page 19

  • 論理回路による実現

    JJ J 基礎情報処理 —論理回路と計算— I II Page 20

  • 1bitの足し算

    0 + 0 = 0

    0 + 1 = 1

    1 + 0 = 1

    1 + 1 = 10 桁上げ

    下位桁からの桁上げがある場合0 + 0 = 1

    0 + 1 = 10

    1 + 0 = 10

    1 + 1 = 11

    1bitの足し算における入出力

    � 入力: 1bitのデータ×2、下位桁からの桁上げ (carry in)

    � 出力: 1bitのデータ×1、上位桁への桁上げ (carry out)

    JJ J 基礎情報処理 —論理回路と計算— I II Page 21

  • 1bit加算器

    a b cin cout sum

    0 0 0 0 0

    0 1 0 0 1

    1 0 0 0 1

    1 1 0 1 0

    0 0 1 0 1

    0 1 1 1 0

    1 0 1 1 0

    1 1 1 1 1

    JJ J 基礎情報処理 —論理回路と計算— I II Page 22

  • 1bit加算器の構成

    � 各出力 bit毎の組合わせ論理回路を構成し、組み合わせるI 桁上げ (cout)のみ計算する組合わせ論理回路I 和 (sum)のみ計算する組合わせ論理回路

    � それぞれ 1bit出力なので、真偽値の計算回路として表せる

    JJ J 基礎情報処理 —論理回路と計算— I II Page 23

  • 桁上げ用回路の構成

    � 桁上げが起こる (cout=1になる)のは、3つの入力 (a,b,cin)のうち2つまたは3つが 1のとき

    � それ以外のとき、桁上げは起こらない (cout=0)

    cout = (a∧b∧cin)∨ (a∧b)∨ (a∧cin)∨ (b∧cin)

    = (a∧b)∨ (a∧cin)∨ (b∧cin)

    JJ J 基礎情報処理 —論理回路と計算— I II Page 24

  • 桁上げ回路図

    cout = (a∧b)∨ (a∧cin)∨ (b∧cin)

    JJ J 基礎情報処理 —論理回路と計算— I II Page 25

  • 和算回路の構成

    � 和が 1(sum=1)になるのは、3つの入力 (a,b,cin)のうち1つまたは3つが 1のとき

    � それ以外のとき、和は 0(sum=0)

    sum = (a∧b∧cin)∨ (a∧¬b∧¬cin)∨ (¬a∧b∧¬cin)∨ (¬a∧¬b∧cin)

    Exercise. 上の式に対応する回路を構成せよ。

    JJ J 基礎情報処理 —論理回路と計算— I II Page 26

  • 1bit加算器構成図

    JJ J 基礎情報処理 —論理回路と計算— I II Page 27

  • n bit加算器

    n = 4の場合

    � 入力: an · · ·a1, bn · · ·b1(n bitデータ列×2)

    � 出力: dn · · ·d1 (加算結果)、cout (桁あふれ 1bit)

    JJ J 基礎情報処理 —論理回路と計算— I II Page 28

  • n bit減算器

    n = 4の場合

    � 入力: an · · ·a1, bn · · ·b1(n bitデータ列×2)

    � 出力: dn · · ·d1 (減算 bn · · ·b1 −an · · ·a1の結果)

    JJ J 基礎情報処理 —論理回路と計算— I II Page 29

  • オーバーフロー・アンダーフロー

    � 計算結果が表現できる範囲を越えてしまった場合はどうなるのか?オーバーフロー 計算結果が範囲より大きくなるエラー

    I 符号なし整数の例 1101+0100(= 13+4) = 0001(= 1)I 符号付き整数の例 0110+0101(= 6+5) = 1011(=−5)I 符号付き整数の例 0011−1011(= 3− (−5)) = 1000(=−8)

    アンダーフロー 計算結果が範囲より小さくなるエラー

    I 符号付き整数の例 1011−0110(= (−5)−6) = 0101(= 5)

    � どの場合も誤った計算結果となる。I 特に、符号付き整数の場合、符号が反転するので注意。

    � ただし、剰余類で考えると正しい計算となっている。(−5)−6 ≡ 5 mod 24, etc.

    JJ J 基礎情報処理 —論理回路と計算— I II Page 30

  • 問題

    4bit長の符合なし整数表現 a4a3a2a1を入力とし、これが表す整数を 7倍した結果を 7bit長の 2進数表現 d7d6d5d4d3d2d1として出力する論理回路を構成せよ。

    例 入力が 1101(= 13)のとき、出力は 1011011(= 91)

    解法1 7回足す。安直だが回路を書くのが大変。ゲートの数も多くなるのでやめましょう。

    解法2 入力の 4倍、2倍、1倍を足し合わせる。2n倍は bitシフト (bit列をずらす)だけなので少しマシですが、もう少し回路を減らせます。

    解法3 (ヒント) 2の補数を使う。

    JJ J 基礎情報処理 —論理回路と計算— I II Page 31

  • 解答例

    ☆ 7 = 8−1→ 8倍したものから元の数を引けばよい。

    (1) 8倍する a4a3a2a1 → a4a3a2a1000 (3bit左シフト)

    (2)引き算する

    � a4a3a2a1000は符号なし整数として 7桁∴符号付き整数 (2の補数表現)としては 8桁必要

    � a4a3a2a1000→ 0a4a3a2a1000� a4a3a2a1 → 0000a4a3a2a1� 0a4a3a2a1000と 0000a4a3a2a1の 2の補数表現を足す

    (3)出力 8bitのうち、下位桁 7bitを出力

    ∵ 出力の範囲は 0以上 105(= 15×7 ≤ 127)以下だから、8桁の 2の補数表現で正しく表される。最上位桁 (必ず 0となる)を無視すればよい。

    JJ J 基礎情報処理 —論理回路と計算— I II Page 32

  • JJ J 基礎情報処理 —論理回路と計算— I II Page 33

  • 講義資料

    � この資料は以下より電子的に入手可能です。http://www.math.kyoto-u.ac.jp/˜susumu/lecture/digital11.pdf

    JJ J 基礎情報処理 —論理回路と計算— I II Page 34

    http://www.math.kyoto-u.ac.jp/~susumu/lecture/digital11.pdf