情報科学序論 - Naoto KOUYAMA homepage

2013年度
プログラミングⅠ
~ 補数表現とイクセス表現 ~
担当教員: 幸山 直人
2013年度 プログラミングⅠ
補数表現
10
0
9
-1
8
-2
7
-3
6
-4
5
-5
4
4
3
3
2
2
1
1
0
0
絶対数(通常)
相対数(補数表現)
負の数
正の数
2013年度 プログラミングⅠ
オーバーフローとアンダーフロー
アンダーフロー
表現可能な数
0
正の数
オーバーフロー
絶対数の最大値
負の数
(補数表現)
絶対数にしろ、相対数にしろ、表現可能な数を
越えた数はコンピュータで扱うことが出来ない。
2013年度 プログラミングⅠ
補数の例
0
0
0
0
0
-1
-1
-1
-1
-1
-2
-2
-2
-2
-2
-3
-3
-3
-3
-3
-4
-4
-4
-4
-4
-5
-5
-5
-5
-5
4
4
4
4
4
3
3
3
3
3
2
2
2
2
2
1
1
1
1
1
0
0
0
0
0
-1
(負の数)
-2
(負の数)
-3
(負の数)
-4
(負の数)
-5
(負の数)
2013年度 プログラミングⅠ
補数による演算
0
0
0
0
-1
-1
-1
-1
-2
-2
-2
-2
-3
-3
-3
-3
-4
-4
-4
-4
-5
+
-5
=
-5
+
-5
4
4
4
4
3
3
3
3
2
2
2
2
1
1
1
1
0
0
0
0
4
-3
1
0
2013年度 プログラミングⅠ
表現可能な数を越えた演算(1)
0
0
0
0
-1
-1
-1
-1
-2
-2
-2
-2
-3
-3
-3
-3
-4
-4
-4
-4
-5
+
-5
=
-5
+
-5
4
4
4
4
3
3
3
3
2
2
2
2
1
1
1
1
0
0
0
0
4
3
7
0
2013年度 プログラミングⅠ
演算を行う際の注意事項(1)
表現可能な数
負の数
0
正の数
0
負の数
(補数表現)
正の数
足し算や引き算などの演算を行なった際は、
演算結果が表現可能な数の範囲に収まって
いることをチェックする必要がある。
2013年度 プログラミングⅠ
表現可能な数を越えた演算(2)
0
0
0
0
-1
-1
-1
-1
-2
-2
-2
-2
-3
-3
-3
-3
-4
-4
-4
-4
-5
+
-5
=
-5
+
-5
4
4
4
4
3
3
3
3
2
2
2
2
1
1
1
1
0
0
0
0
-4
-3
-7
0
2013年度 プログラミングⅠ
演算を行う際の注意事項(2)
表現可能な数
負の数
0
正の数
0
負の数
(補数表現)
正の数
足し算や引き算などの演算を行なった際は、
演算結果が表現可能な数の範囲に収まって
いることをチェックする必要がある。
2013年度 プログラミングⅠ
イクセス表現
10
5
9
4
8
3
7
2
6
1
5
0
4
-1
3
-2
2
-3
1
-4
0
-5
絶対数(通常)
バイアス
(ゲタ)
相対数(イクセス表現)
バイアスは5とする
2013年度 プログラミングⅠ
イクセス表現された数の例
5
5
4
4
3
3
2
2
1
1
0
-1
-2
-3
>
大小関係が
直ちにわかる
0
-1
-2
-3
-4
-4
-5
-5
3
-1
2013年度 プログラミングⅠ
注意1
 2進数における補数表現
最上位ビットが0ならば正の数
最上位ビットが1ならば負の数
 2進数におけるイクセス表現
最上位ビットが1ならば正の数
最上位ビットが0ならば負の数
2013年度 プログラミングⅠ
注意2:負の数について(1)

補数表現からイクセス表現への変換
補数表現およびイクセス表現を2進数8桁でそれぞれ表示す
る。このとき、負の2進数-x(x>0)の補数表現は28+(-x)である。
また、イクセス表現は(-x)+(28/2-1)であるから、
(イクセス表現)=(28-28)+(-x)+(28/2-1)
=(28+(-x))+(28/2-1)-28
=(補数表現)+(28/2-1)-1000000002
と表せる。このとき最後の項は前半の2項の和によって9桁目
に繰り上がりがあることを意味する。すなわち、前半の2項の
和をとり、9桁目の繰り上がりを無視すれば補数表現からイク
セス表現への変換が完了する。
2013年度 プログラミングⅠ
注意2:負の数について(2)

イクセス表現から補数表現への変換
補数表現およびイクセス表現を2進数8桁でそれぞれ表示す
る。このとき、負の2進数-x(x>0)の補数表現は28+(-x)であり、
イクセス表現は(-x)+(28/2-1)であるから、
(補数表現)=28+(-x)+(1-1)
=(28/2+28/2)+(-x)+(1-1)
=(イクセス表現)+(28/2+1)
と表せる。したがって、イクセス表現に(28/2+1)=100000012
を足せば、イクセス表現から補数表現への変換が完了する。