230 likes | 350 Views
08 情報科学概論 (3) : 2 進数表現 2008 年 4 月 24 日4限(41教室). 田中美栄子 4803 室(木曜 5 限) mieko@ike.tottori-u.ac.jp 知識工学 A. 今日の目標. 2 進数⇔ 16 進数、また 10 進数との変換 2 進数の補数、補数を用いた引き算. ノイマン式・コンピュータにおける情報の表現に 2 進数 を採用したわけ .. (3176) = 3×10 3 + 1× 10 2 + 7×10 1 + 6×10 0 = 3000 + 100 + 70 + 6. 10. 数の表現. 10 進数.
E N D
08情報科学概論(3):2進数表現2008年4月24日4限(41教室)08情報科学概論(3):2進数表現2008年4月24日4限(41教室) 田中美栄子 4803室(木曜5限) mieko@ike.tottori-u.ac.jp 知識工学A
今日の目標 2進数⇔16進数、また10進数との変換 2進数の補数、補数を用いた引き算 ノイマン式・コンピュータにおける情報の表現に2進数を採用したわけ.
(3176) =3×103+1× 102+7×101+6×100 =3000+100+70+6 10 数の表現 • 10進数 3176 1の位 10の位 100の位 1000の位 100 101 102 103 基数
(1101)2 =1×23+1× 22+0×21+1×20 =(8+4+0+1)10=1310 2 数の表現 • 2進数 1101 1の位 2の位 4の位 8の位 20 21 22 23 基数
(3176) =3×163+1× 162+7×161+6×100 =12288+256+112+6=12662 16 数の表現 • 16進数 3176 1の位 10の位 100の位 1000の位 160 161 162 163 基数
(1011) =1×23+0×22+1×21+1×20 =(11) 2 10 (BEEF) =11×163+14×162+14×161+15×160 = 49152+3584+224+15 = (52975) 10 16 数の表現(2進数,16進数) • 2進数 (1011) • 16進数 (BEEF) • 10~15はA~Fで表す
基数の変換(2進数→10進数) • 整数 • 例: (11011010)2 • 小数 • 例: (0.1011)2 (11011010)2=1×27+1×26+1×24+1×23+1×21 =128+64+16+8+2 =(218)10 (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であった剰余が2進数で次の桁 etc.
十進法から二進法へ(小数の場合) 2倍すると、一桁ずれて a.bcd となるが、0.2だから1より小さいのでa=0 2倍すると ab.cd となるが0.4だから1より小さいのでb=0 2倍すると abc.d となるが0.8だから1より小さいのでc=0
十進法から二進法へ(小数)続 0.1 桁上がり ×2=0.20 ×2=0.40 ×2=0.80 ×2=1.6 (1を引く 0.6) 1 ×2=1.2(1を引く 0.2) 1 ×2=0.40 ×2=0.80 ×2=1.6(1を引く 0.6) 1 • さらに2倍すると10進法で1.6、つまり1より大きいがこれの2進表示は abcd となり、d=1である。
二進法から十六進法へ • 0000=01000=8 左二進法、 • 0001=11001=9 右十六進法 • 0010=21010=A • 0011=31011=B • 0100=41100=C • 0101=51101=D • 0110=61110=E • 0111=71111=F
2進法を使う理由 • 装置が簡単で間違いにくく、符号効率最大 例えば 「2進数で1億円あげる」 と言われたとしよう。100000000円を十進数に直すと,要するに2の8乗で、十進数では 256円!
マークシートを思い出せば • 2進法の数字をコンピュータに読み取らせるには0と1を横にタイプしたものを必要な行数だけ利用する。1億ならまず最初の桁は1の方にマークし、残りの8桁を全て0にする。これを読み取るには一桁当たり二つの数のどちらであるかを確認すればよいので2×桁数の作業量(1億なら18回)
300を表せば 2進マークシート 10進マークシート ↑ 10列を3行スキャン=30回の手間 2列を9行スキャン= 18回の手間 → 01 01 01 01 01 01 01 01 01 0123456789 0123456789 0123456789
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=3 で実現することを示す。そのために手間をxで微分すると を用いて となって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) これを のように表すのが浮動小数点表示(floating point) 0.253は仮数、これに基数を指数回かけたもので表す
浮動小数点表示 6.625=110.101(二進法)=0.110101×23 もう少しコンパクトに 6.625=110.101(二進法)=0.0110101×24 =0.0110101×161 符号 指数部+1000 0000 仮数部の小数点以下の部分 (7桁で-64から63までを表せる)