Document

0
0
1
0
1
0
1
1
電子回路学
講義#3: 負の表現法
1
0
0
1
0
1
0
1
1
n 
2進数:「正」と「負」の値
絶対値のみと考えれば、3ビットで8つの値、4ビット
で16個の値など表せますが、符号が必要となると...
2進数
0000
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
4 2 1
10進数
+0
+1
+2
+3
+4
+5
+6
+7
2
1
符号付き2進数
0
0
1
0
1
0
1
1
n 
n 
先頭に一つのビットを付けて、符号にします
「符号付き2進数」の先頭ビットは正 = 0、負 = 1です
2進数
0000
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
10進数
+0
+1
+2
+3
+4
+5
+6
+7
4 2 1
0
0
1
0
1
0
1
1
n 
n 
2進数
1000
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
10進数
-0
-1
-2
-3
-4
-5
-6
-7
4 2 1
3
符号付き2進数:特徴
作成は、2進数に符号ビットを付けるだけで容易です
しかし、0は表現が二つ(+0, −0)あります
2進数
0000
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
10進数
+0
+1
+2
+3
+4
+5
+6
+7
2進数
1000
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
10進数
-0
-1
-2
-3
-4
-5
-6
-7
4
2
符号付き2進数:短所
0
0
1
0
1
0
1
1
n 
値用のビットは一つ減り、値の範囲は狭くなります
n 
4ビットで通常0〜15表せますが、符号付きでは0〜7です
2進数
0000
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
10進数
+0
+1
+2
+3
+4
+5
+6
+7
2進数
1000
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
10進数
-0
-1
-2
-3
-4
-5
-6
-7
5
符号付き2進数:短所
0
0
1
0
1
0
1
1
n 
引き算は、足し算の回路で行えない
n 
n 
計算機(パソコン、CPU)の回路の多目的の利用は望ましい
正と負の値を(足し算の回路で)足すと、間違った結
果を得てしまいます
1 10 0 1 0 0 1 0 1 +5
+ 1 1 0 1 -5
1
+2 ! 6
3
問題#11の類似問題
0
0
1
0
1
0
1
1
n 
-54(10)の符号付き2進数を示しなさい
1 ← 3 ← 6 ← 13 ← 27 ← 54 (÷2
↓ ↓ ↓ ↓ ↓ ↓
1 1 0
1
1
0
110110(2)
(負の)符号のビットを先頭に付けるだけ: 1 110110(2)
7
1の補数
0
0
1
0
1
0
1
1
n 
2進数を一桁ずつを反転(否定)させますと、その2進
数の「1の補数」が得られます
n 
n 
否定:1→0への変換、および0→1への変換を指します
特徴:負の値を表すために使用できます
符号
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
8
4
1の補数:短所
0
0
1
0
1
0
1
1
n 
n 
符号用のビットは必要です
この方法でも、0は表現が二つあります
2進数
0000
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
0
1
0
1
1
n 
n 
1の補数
1111
1110
1101
1100
1011
1010
1001
1 0 0 0
10進数
-0
-1
-2
-3
-4
-5
-6
-7
9
1の補数:短所
0
1
0
10進数
+0
+1
+2
+3
+4
+5
+6
+7
表現範囲は半分となります
下記の例では、4ビットで、-7 ~ +7しか表せません
2進数
0000
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
10進数
+0
+1
+2
+3
+4
+5
+6
+7
1の補数
1111
1110
1101
1100
1011
1010
1001
1 0 0 0
10進数
-0
-1
-2
-3
-4
-5
-6
-7
10
5
1の補数:長所
0
0
1
0
1
0
1
1
n 
n 
引き算を加算(回路)で行えますが、
桁上げが溢れると、それを結果に加算する必要となり
ます
符号
+
0101
1011
10000
+
1
0001
+5
-4
0?
+1 11
0
0
1
0
1
0
1
1
n 
n 
n 
問題#16の類似問題
-6(10)の1の補数の表現はどれか
解答例:まず符号なし正の値を2進数で表現して、
ビットの符号を付けて、ビットごとに反転(0を1に;
1を0に)します
1 ← 3 ← 6 (÷2
↓ ↓ ↓
1 1 0
0110(2)
結果: 1001(2)
12
6
負数:2の補数
0
0
1
0
1
0
1
1
n 
2の補数は、対象数字の「1の補数」に1を足して得ら
れます
符号
0 1 0 1 0 1 0 1 0 0
1 0 1 0 1 0 1 0 1 1
+
1
1 0 1 0 1 0 1 1 0 0
13
2の補数:生成の簡易方法
0
0
1
0
1
0
1
1
n 
n 
1の補数も、1の足し算も不要です
やり方:2進数の最も右の(最下位)ビットから左へ1
ビットずつ進みます
n 
符号
最初の「1」まで、各々の桁(ビット)をそのまま記す
0 1 0 1 0 1 0 1 0 0
↓
0
14
7
2の補数
0
0
1
0
1
0
1
1
n 
2進数の最も右の(最下位)ビットから左へ...
n 
最初の「1」まで、各々の桁(ビット)をそのまま記す
0 1 0 1 0 1 0 1 0 0
↓
0 0
15
2の補数
0
0
1
0
1
0
1
1
n 
2進数の最も右の(最下位)ビットから左へ...
n 
n 
最初の「1」まで、各々の桁(ビット)をそのまま記す
それ以降の全ビットを反転(否定)します
0 1 0 1 0 1 0 1 0 0
↓
1 0 0
16
8
2の補数
0
0
1
0
1
0
1
1
n 
2進数の最も右の(最下位)ビットから左へ...
n 
n 
最初の「1」まで、各々の桁(ビット)をそのまま記す
それ以降の全ビットを反転(否定)します
0 1 0 1 0 1 0 1 0 0
↓
1 1 0 0
17
2の補数
0
0
1
0
1
0
1
1
n 
2進数の最も右の(最下位)ビットから左へ...
n 
n 
最初の「1」まで、各々の桁(ビット)をそのまま記す
それ以降の全ビットを反転(否定)します
0 1 0 1 0 1 0 1 0 0
↓
0 1 1 0 0
18
9
2の補数
0
0
1
0
1
0
1
1
n 
2進数の最も右の(最下位)ビットから左へ...
n 
n 
最初の「1」まで、各々の桁(ビット)をそのまま記す
それ以降の全ビットを反転(否定)します
0 1 0 1 0 1 0 1 0 0
↓
1 0 1 1 0 0
19
2の補数
0
0
1
0
1
0
1
1
n 
2進数の最も右の(最下位)ビットから左へ...
n 
n 
最初の「1」まで、各々の桁(ビット)をそのまま記す
それ以降の全ビットを反転(否定)します
0 1 0 1 0 1 0 1 0 0
↓
0 1 0 1 1 0 0
20
10
2の補数
0
0
1
0
1
0
1
1
n 
2進数の最も右の(最下位)ビットから左へ...
n 
n 
最初の「1」まで、各々の桁(ビット)をそのまま記す
それ以降の全ビットを反転(否定)します
0 1 0 1 0 1 0 1 0 0
↓
1 0 1 0 1 1 0 0
21
2の補数
0
0
1
0
1
0
1
1
n 
2進数の最も右の(最下位)ビットから左へ...
n 
n 
最初の「1」まで、各々の桁(ビット)をそのまま記す
それ以降の全ビットを反転(否定)します
0 1 0 1 0 1 0 1 0 0
↓
0 1 0 1 0 1 1 0 0
22
11
2の補数
0
0
1
0
1
0
1
1
n 
2進数の最も右の(最下位)ビットから左へ...
n 
n 
最初の「1」まで、各々の桁(ビット)をそのまま記す
それ以降の全ビットを反転(否定)します
0 1 0 1 0 1 0 1 0 0
↓
1 0 1 0 1 0 1 1 0 0
23
2の補数での加算と減算
0
0
1
0
1
0
1
1
n 
2の補数:長所
n 
n 
通常の加算(回路)で減算できる
例: +2 −8 の計算
+2 → 0 0 0 1 0
+8 → 0 1 0 0 0 → −8 :1 1 0 0 0
00010
+ 11000
24
12
2の補数:長所
0
0
1
0
1
0
1
1
n 
n 
通常の加算(回路)で減算が行えます
計算例: +2 −8
+
00010
11000
+2
-8
11010
00110
-6
16 8 4 2 1
25
2の補数での減算
0
0
1
0
1
0
1
1
n 
n 
n 
計算例: +9 – 8
正の結果の場合は、あふれるビットを無視します
結果の符号で、2の補数を取るか否かを判定する
n 
0の場合は、結果の2の補数を取らない
+
01001
11000
100001
+9
-8
+1 26
13
2の補数での負の値の加算
0
0
1
0
1
0
1
1
n 
2の補数:例題 -2-8の計算
n 
n 
あふれるビットを無視
結果の符号で、「絶対値」を得るために2の補数を取るか否
かを判定する
n 
1の場合は、結果の2の補数をとります
+
11110
11000
110110
-2
-8
-10 01010
10
27
0
0
1
0
1
0
1
1
n 
問題#21の類似問題
-368(10)の2の補数はどれか
1 ← 2 ← 5 ← 11 ← 23 ← 46 ← 92 ← 184 ← 368 (÷2
↓ ↓ ↓ ↓ ↓ ↓ ↓
↓
↓
1 0 1
1
1
0
0
0
0 0101110000(2)
右端から左端へ: 1010010000(2)
28
14
0
0
1
0
1
0
1
1
n 
問題#26
77 – 45の引き算を2の補数で行って得られる結果はど
れか
1 ← 2 ← 4 ← 9 ← 19 ← 38 ← 77 (÷2
↓ ↓ ↓ ↓ ↓ ↓ ↓
1 0 0 1
1
0
1 1 ← 2 ← 5 ← 11 ← 22 ← 45 (÷2
↓ ↓ ↓ ↓ ↓ ↓
1 0 1
1
0
1
29
0
0
1
0
1
0
1
1
n 
n 
n 
問題#26
一番長い数字に符号のビットを付けて
もう一つの数字をその長さに合わせます
負の値を2の補数に変えて、足します
77(10) = 01001101(2)
45(10) = 00101101
- 45(10) = 11010011
01001101
+ 11010011
100100000
= 32(10)
30
15
0
0
1
0
1
0
1
1
n 
n 
ME試験問題【21-34】
10進数の10,11,12,・・・・を16進数でA,B,C,・・・・と表記す
るとき、16進数6とAとの和を16進数で表した結果はど
れか
解答例:6と10の和は16であるため、16進数では10(16)
と表す。故に、正解は4)である
31
0
0
1
0
1
0
1
1
n 
n 
n 
n 
注意
負の値を表すすべての方法には、符号用のビットを加
えます
問題をやるときは、このことに注意すること
引き算の問題で、一番ビットの長い(ビット数の多
い)値の長さに、もう一方の数字の長さを合わせます
2, 8と16の足し算は、2進数でやってから結果の求めら
れる基数に最後に変換する方法も可能です
32
16
授業内容の電子版
0
0
1
0
1
0
1
1
n 
科目のページ
n 
http://www.cc.toin.ac.jp/sc/palacios/ce/digital/
n 
から、授業のpdfフィアルをダウンロードできます
33
17