情報科学概論 2進数表現 Lecture 2 田中美栄子 4803室(金曜5限&昼休み) [email protected] 知識工学A 今日の目標 ノイマン式・コンピュータにおける情報の表現の 基礎である2進数,16進数による数の表現方法, 演算方法について理解する. 何故,2進法を採用したのかも理解する 011001111111010 10101001000100 10001010100010 01010100100000 機械による演算は • 世界最初の機械式計算機は1642年に パスカルが作成 • その後、様々な人物が 改良を加え今のような形に • 考え方や手法は大きくは変わっていない! 気負わずに,コンピュータ(電子計算機)の 情報表現の基礎である 2進数や16進数を理解していきましょう. コンピュータ内部の情報表現 • コンピュータ内の情報は,電気信号や磁気信 号で状態を表す. – 2つの状態で区別することが望ましい • ON/OFF,高/低等 – ‘0’‘1’の2値で表現する2進数で全ての情報 を表す ON ON 1 1 2進数の数桁を使ったコードで,データ,プログラ –– ちなみに (10)2 という表記をしている場合, ム,文書,図形,画像を表す 右下の小さな数字で,2進数表記である事を表す. OFF 0 OFF 0 10進数・16進数・2進数 について 0 1 2 3 4 0 1 2 3 4 0000 0001 0010 0011 0100 5 6 7 8 9 5 6 7 8 9 0101 0110 0111 1000 1001 10 11 12 13 14 15 A B C D E F 1010 1011 1100 1101 1110 1111 16進数ではアルファベットのA~Fを用いて10以降を表現. つまり16進の世界では A+3 = D 10進数・16進数・2進数 について ・・・ 10 11 12 13 14 15 ? ? A 1010 16 10 10000 B 16進数、2進数の表記方法は 1011 17 11 10001 C 1100 18 12 10010 この後ちゃんと説明するのでご安心を! D 1101 19 13 10011 E 1110 20 14 10100 F 1111 21 15 10101 数の表現(10進数) 指数 指数 10進数だから 基数 3 1 7 6基数は10に 1の位 100 × 6 = 6 10の位 101 × 7 = 70 100の位 102 × 1 = 100 1000の位 103 × 3 = 3000 + 3176 数の表現(2進数,16進数) • 2進数 (1011) (1011) 2 =1×23+0×22+1×21+1×20 =(11)10 • 16進数 (BEEF) A~Fは10~15を表す (BEEF) 16=11×163+14×162+14×161+15×160 = 45056 + 3584 + 224 + 15 = (48879)10 基数の変換(2進数→10進数) • 整数 – 例: (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.6875)10 基数の変換(10進数→2進数) • 整数 手順 1. 10進数を2で割り,余りを保存. 2. 商をさらに2で割り,余りを保存. 3. 商が0になるまで割り算を繰り返す. 4. 保存した余りを保存した順番と 逆に並べる. 16進数への変換は手順の2を16にすれば良い 10進数から2進数への変換例 (218)10を2進数に 2) 218 2) 109・・・0 2) 54・・・1 2) 27・・・0 2) 13・・・1 2) 6・・・1 2) 3・・・0 2) 1・・・1 0・・・1 (218)10=(11011010)2 基数の変換(10進数→2進数) • 小数 – 整数部分は整数の変換方法を適用 手順 1. 2. 3. 4. 10進数の小数部を2倍し,整数部を保存. 積の小数部をさらに2倍し,整数部を保存. 積の小数部が0になるまで繰り返す. 保存した整数部を保存した順番に並べる. 16進数への変換は手順の2を16にすれば良い 10進数から2進数への変換例 (0.625)10を2進数に 0.625 × 2 1.25 0.25 × 2 0.5 (0.625)10=(0.101)2 0.5 × 2 1.0 0になったので終了 演習問題 ① (11001101)2を10進数にしなさい ② (486)10, (1000)10を2進数にしなさい ③ (1A3C)16を2進数,10進数にしなさい 演習問題(解答) ① (11001101)2を10進数にしなさい 128+64+8+4+1=(205)10 ② (486)10, (1000)10を2進数にしなさい (486)10=(111100110)2 (1000)10=(1111101000)2 ③ (1A3C)16を2進数,10進数にしなさい (1A3C)16=(0001 1010 0011 1100)2 (1A3C)16=4096*1+256*10+16*3+1*12=(6716)10 2) 486 2) 243・・・0 2) 121・・・1 2) 60・・・1 2) 30・・・0 2) 15・・・0 2) 7・・・1 2) 3・・・1 2) 1・・・1 0・・・1 2) 1000 2) 500・・・0 2) 250・・・0 2) 125・・・0 2) 62・・・1 2) 31・・・0 2) 15・・・1 2) 7・・・1 2) 3・・・1 2) 1・・・1 0・・・1 (486)10=(111100110)2 (1000)10=(1111101000)2 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(log10A)+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進数と他の表示との変換 • 十進法から二進法へ(整数の場合) 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進法の足し算 • X=1101, Y=111 の和: 11 1111 + 1101 10100 2 ここでやっているのは 最下位桁:1+1=0 (1繰り上がり) 2の桁: 1+1+0=0 (1繰り上がり) 4の桁: 1+1+1=1 (1繰り上がり) 等 2進法の引き算 • 0と1を反転したもの(2の補数)に1を加え たもの(1の補数)をつくり、これを加算する。 つまり • 例:7-5 (100101011)2 の補数は -5は101を反転させて010としたあと、1を加 えて011を作る。これが5に対する“1の補 (011010101)2 になる 数”である。111にこれを加えると010とな る。 (実は桁あふれを利用) 桁あふれについて • -5(マイナス5)とは・・・・・・5に「なにか」を足して 0にするものという考え方 1 0 1 + 0 ?1 1 ←2進数で5の補数 1 0 0 0 既定の枠外の値は無視 これで2進数の「5-5=0」が完成. 負の数の補数表示と桁あふれ • 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は仮数、これに基数(10)を指数(-3)回掛 けて表す 浮動小数点表示 符号 指数 仮数部の小数点以下の部分 6.625=110.101(二進法)=0.110101×23
© Copyright 2024 ExpyDoc