09gairon2

情報科学概論
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