情報科学概論

08情報科学概論(3):2進数表現
2008年4月24日4限(41教室)
田中美栄子 4803室(木曜5限)
[email protected]
知識工学A
今日の目標
2進数⇔16進数、また10進数との変換
2進数の補数、補数を用いた引き算
ノイマン式・コンピュータにおける情
報の表現に2進数を採用したわけ.
数の表現
• 10進数
3 1 7 6
1の位
10の位
100の位
1000の位
100
101
102
103
基数
(3176) 10=3×103+1× 102 +7×101+6×100
=3000+100+70+6
数の表現
• 2進数
1 1 0 1
1の位
2の位
4の位
8の位
20
21
22
23
基数
(1101)22 =1×23+1× 22 + 0×21+1×20
=(8+4+0+1)10=1310
数の表現
• 16進数
3 1 7 6
1の位
10の位
100の位
1000の位
160
161
162
163
基数
(3176) 16=3×163+1× 162 +7×161+6×100
=12288+256+112+6=12662
数の表現(2進数,16進数)
• 2進数 (1011)
(1011) 2=1×23+0×22+1×21+1×20
=(11) 10
• 16進数 (BEEF)
– 10~15はA~Fで表す
(BEEF) =11×163+14×162+14×161+15×160
16
= 49152+3584+224+15
= (52975) 10
基数の変換(2進数→10進数)
• 整数
– 例: (11011010)2
•
(11011010)2 =1×27+1×26+1×24+1×23+1×21
=128+64+16+8+2
=(218)10
小数
– 例: (0.1011)2
(0.1011)2 =1×2(‐1)+1×2(-3)+1×2(-4)
=1/2+1/8+1/16
=(0.685)10
2進数と他の表示との変換
• 十進法から二進法へ(整数の場合)
q  2  (2  (2  c3  c 2 )  c1 )  c0
 c3c 2c1c0
数qを2で割った剰余が2進数で最下桁
その商を2であった剰余が2進数で次の桁
etc.
十進法から二進法へ(小数の場合)
1
2
3
0.110  a  2  b  2  c  2  c  2
 0.abcd2
2倍すると、一桁ずれて
a.bcd となるが、0.2だから1より小さいのでa=0
2倍すると
ab.cd となるが0.4だから1より小さいのでb=0
2倍すると
abc.d となるが0.8だから1より小さいのでc=0
4
十進法から二進法へ(小数)続
• さらに2倍すると
10進法で1.6、つ
まり1より大きい
がこれの2進表
示は
abcd となり、d=1
である。
0.1
桁上がり
×2 =0.2
0
×2 =0.4
0
×2 =0.8
0
×2 =1.6 (1を引く 0.6)
1
×2 =1.2 (1を引く 0.2)
1
×2 =0.4
0
×2 =0.8
0
×2 =1.6 (1を引く 0.6)
1
二進法から十進法へ
ABC. abc...2  A  2  B  2  C  2
2
1
2
1
3
 a  2  b  2  c  2 ......
0
二進法から十六進法へ
•
•
•
•
•
•
•
•
0000=0
0001=1
0010=2
0011=3
0100=4
0101=5
0110=6
0111=7
1000=8
1001=9
1010=A
1011=B
1100=C
1101=D
1110=E
1111=F
左二進法、
右十六進法
2進法を使う理由
• 装置が簡単で間違いにくく、符号効率最大
例えば
「2進数で1億円あげる」
と言われたとしよう。100000000円を十進数
に直すと,要するに2の8乗で、十進数では
256円!
マークシートを思い出せば
• 2進法の数字をコンピュータに読み取らせる
には0と1を横にタイプしたものを必要な行数
だけ利用する。1億ならまず最初の桁は1の
方にマークし、残りの8桁を全て0にする。これ
を読み取るには一桁当たり二つの数のどちら
であるかを確認すればよいので2×桁数の作
業量(1億なら18回)
300を表せば
10進マークシート
0123456789
0123456789
0123456789
↑
10列を3行スキャン=30回の手間
2列を9行スキャン= 18回の手間 →
2進マークシート
01
01
01
01
01
01
01
01
01
N進数ならN×(桁数)
• 10進法では,256となり,3桁必要
• 10進法のマークシートは横に0から9まで
の9つの数字がタイプしてあり、256ならこ
れを3行使う。つまり10×桁数(256なら30
回)
• 先の2進法より明らかに手間がかかる。
• 一桁目が2であることがわかればすぐ次の
桁に行けるか。2である事を確認するには
2以外にマークがあってはいけない。
2進数がもっとも効率が高い
• 2進数でx桁になるときN進数では何桁?
• 例えば10進法表示でA=256と書ける数を2
で8回割ると1になり2で割れない。 よって
この数の2進数表示は9桁=log2(A)+1で
ある。
• A=256の十進法表示は要するにこの数を
十で割り(剰余を1の位の数とする)その答
えを十で割る(剰余を十の位の数とする)。
よってこの数の十進表示は
int(log10(A))+1
x進数の場合
• 手間は x(logx A  1)
であり,最小値がx=3
で実現することを示す。そのために手間をxで微分す
ると
d
d ln A
1/ x
を用いて dx logx A  dx ln x   ln A (ln x) 2
ln A
ln A
1

ln x (ln x) 2
となってAが大きな数のときx=eで最小となる
2進法の足し算
• X=1101, Y=111 の和:
111
1101(+
10100
ここでやっているのは
最下位桁:1+1=0 (1繰り上がり)
2の桁: 1+1+0=0 (1繰り上がり)
4の桁: 1+1+1=1 (1繰り上がり) 等
2進法の引き算
• 0と1を反転したもの(2の補数)に1を加え
たもの(1の補数)をつくり、これを加算する。
• 例:7-5
-5は101を反転させて010としたあと、1を加
えて011を作る。これが5に対する“1の補
数”である。111にこれを加えると010となる。
(実は桁あふれを利用)
負の数の補数表示と桁あふれ
• 8桁の二進数(8bit、また1byteとも言う)に正と負の
数を入れようとすると、正の部分は0から127まで、
負の部分は-1から-128までしか入らない。そこで正
の数は0から始まる00000000から01111111までと
し、負の数は1から始まるとすると引き算するのに便
利である。
• -1は11111111、-128は10000000と書ける。
• 最大数である127に1を足すと最小数である-128に、
最小数-128から1を引くと、最大数である127となり、
また、-1に1を足すと0になる。
小数の二進法表示
• 0.000253などは固定小数点表示(fixed
point)
これを 0.253103
のように表すのが浮動小数点表示(floating
point)
0.253は仮数、これに基数を指数回かけたもの
で表す
浮動小数点表示
符号 指数
仮数部の小数点以下の部分
6.625=110.101(二進法)=0.110101×23
もう少しコンパクトに
6.625=110.101(二進法)=0.0110101×24
=0.0110101×161
0(正) 1000 0001
01101010 00000000 00000000
符号 指数部+1000 0000 仮数部の小数点以下の部分
(7桁で-64から63までを表せる)