2進法

10進数
Digits: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
例:
3271 = (3×103) + (2×102) + (7×101) + (1×100)
8進数
Digits: 0, 1, 2, 3, 4, 5, 6, 7
例:
3271 = (3×83) + (2×82) + (7×81) + (1×80)
2進数
bnbn-1…b2b1b0= bn 2n + bn-1 2n-1+…+ b2 22 + b121 + b020
0101010 = 0×26 + 1×25 + 0×24 + 1×23 + 0×22 + 1×21 + 0×20
10進
2進
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
16進
8進
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
00
01
02
03
04
05
06
07
10
11
12
13
14
15
16
17
= 32+8+2 = 42
2進:1ビットで1桁
8進:3ビットで1桁
16進:4ビットで1桁
240 1099511627776
232
4294967296
230
1073741824
224
16777216
220
1048576
16
2
65536
210
1024
28
256
24
16
T(テラ)ほぼ1012
G(ギガ)ほぼ109
M(メガ)ほぼ106
64K
K(キロ)ほぼ103
1バイトで表現できるもの
負の数の表し方
(1)補数表示: two’s complement 2の補数、先頭ビットだけが負
(2)絶対値表示:signed magnitude 先頭ビットが符号で残りが絶対値
(3)反転表示: one's complemnet xのビットを反転したものが「-x」
(4)下駄履き表示:biased representation 「x+下駄」の形
符号なし数
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
8
1000
9
1001
10
1010
11
1011
12
1100
13
1101
14
1110
15
1111
(1)
0
1
2
3
4
5
6
7
-8
-7
-6
-5
-4
-3
-2
-1
(2)
0
1
2
3
4
5
6
7
-0
-1
-2
-3
-4
-5
-6
-7
(3)
0
1
2
3
4
5
6
7
-7
-6
-5
-4
-3
-2
-1
-0
(4)
-8
-7
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
7
nビットの場合:
先頭のビットの値をsとし
それ以降のビットが表す値
をxとしたとき、
(1)の値は
-2n-1s+x = (-2n+2n-1)s+x
= -2ns+(2n-1s+x)
(2)の値は
(-1)sx
(3)の値は((1)との差はs)
-2n-1s+x+s
(4)の値は(2n-1が下駄)
2n-1s+x-2n-1
(1)〜(3)の場合、先頭の
ビットは「符号ビット」
(4)の場合符号なし数と同順
補数表示(1)
xの「2の補数」(xと足して2nになるもの:nビットの世界では2nはゼロ)
を「-x」とする。
たとえば、4ビットの場合、 24=16で
13は3と足すと16になるから「-3」とする。(3の「16の補数」は13 )
13 ≡ -3 (mod 16)
mod 2nで-x(x < 2n-1)となるものを-xとする
xから-x(補数表示)を求める場合は
(1)2n-xを計算する
4ビットで0011なら、10000-0011=1101
(2)xの全ビットを反転して、1を加える(xとそれを反転したものを加
えると補数表示としては-1となるから、1足りない)
4ビットで0011なら、反転して1100、それに1加えて1101
補数表示(2)
nビットの補数表示で表現できる値は
- 2n-1 ~ 2n-1 -1
8ビットでは27=128であるから
-128 ~ 127
nビットの補数表示の値をmビット(n<m)の補数表示
にする場合は符号ビットを左に延ばせばよい(符号拡張)
たとえば、4ビットの -310=11012 は8ビットでは 111111012
4ビットの 310=00112 は8ビットでは 000000112
32ビットの場合
0111
0111
1000
1000
1111
1111
1111
1111
1111
0000
0000
1111
1111
1111
1111
1111
0000
0000
1111
1111
1111
1111
1111
0000
0000
1111
1111
1111
1111
1111
0000
0000
1111
1111
1111
1111
1111
0000
0000
1111
1111
1111
1111
1111
0000
0000
1111
1111
1111
11102
11112
00002
00012
11012
11102
11112
=
=
=
=
=
=
=
2,147,483,64610
2,147,483,64710=231-1
-2,147,483,64810=-231
-2,147,483,64710
-310
-210
-110
10進整数の2進整数への変換
(x)10 = (bnbn-1…b2b1b0)2= bn 2n + bn-1 2n-1+…+ b2 22 + b121 + b020
x/2 = (bnbn-1…b2b1)2= bn 2n-1 + bn-1 2n-2+…+ b2 21 + b120
x%2 = b0
(x/2)/2 = (bnbn-1…b2)2= bn 2n-2 + bn-1 2n-3+…+ b2 20
(x/2) %2 = b1
((x/2)/2) %2 = b2
…
128,64,32,16,8,4,2,1
の和で42になる
ものを探せば、
32+8+2=25+23+21
余り
2) 42
2) 21
2) 10
2) 5
2) 2
2) 1
0
0
1
0
1
0
1
4210 = 1010102
10進小数の2進小数への変換
(0.x)10 = (0.b1b2b3b4…)2= b1 2-1 + b2 2-2+ b3 2-3 + b4 2-4 …
x×2 = (b1.b2b3b4…)2= b1 + b2 2-1+ b3 2-2 + b4 2-3 …
(x×2 - b1 ) ×2 = (b2 . b3b4…)2 = b2 + b3 2-1+ b4 2-2 …
((x×2 - b1 ) ×2 - b2 ) ×2 = (b3 . b4…)2 = b3 + b4 2-1…
…
0.562510 = (0.b1b2b3b4…)2
0.5625×2 =1.1250 = (b1.b2b3b4…)2
0.125×2 =0.250 = (b2.b3b4…)2
0.25×2 =0.50 = (b3.b4…)2
0.5×2 =1.0 = (b4.b5…)2
0.562510 = 0.10012
10進小数は2進小数としては正確に表現できないものがある。
たとえば、 10進小数の0.1は2進小数としては循環小数
0.110 = (0.b1b2b3b4…)2
0.1×2 =0.2 = (b1.b2b3b4…)2
0.2×2 =0.4 = (b2.b3b4…)2
0.4×2 =0.8 = (b3.b4…)2
0.8×2 =1.6 = (b4.b5…)2
0.6×2 =1.2 = (b5.b6…)2
0.2×2 =0.4 = (b6.b7…)2
0.4×2 =0.8 = (b7.b8…)2
…
0.110 = (0.00011001100…)2
.
.
= (0.00011)2
循環小数
2進数の加減算
減算は補数の加算として実行される(3-5=3+(-5), 3-(-5)=3+5)
3+4=7
0011
+0100
0111
3+5=?
0011
+0101
1000
3+-5=-2
0011
+1011
1110
-3+-4=-7 -3+-5 -3+-6=?
1101
1101
1101
+1100
+1011 +1010
11001
11000 10111
3+-2=1
0011
+1110
10001
・左端のビットから繰り上げ
られるビットはキャリー
と呼ばれる(図の1)
・正+正=負、負+負=正
の場合はオーバフロー (図の?)
・符号ビットへの繰り上げと
符号ビットからの繰り上げ
(キャリー)が等しくなけ
ればオーバフロー
2つの数aとbの比較結果の条件コード
a + (bの補数) の結果
if キャリー then C=true else C=false
if オーバフロー then V=true else V=false
if 負 then N=true else N=false
if ゼロ then Z=true else Z=false
(trueは1、falseは0で表現される)
a, bを符号付き数と見た場合
if N = V then a ≧ b ⇦ a+(−b)がオーバフローしなければ正
if N≠V then a < b
⇦ a+(−b)がオーバフローしなければ負
a, bを符号なし数と見た場合
if C then a ≧ b ⇦ a+(2n−b) ≧ 2n (キャリー)
if not C then a < b
以下の問では、整数を8ビット( 2桁の16進数)で表現する。
問1
以下の10進数を2桁の16進数に変換せよ。
たとえば、 8510 = xy16 の形で表現せよ
85, 77, 53, 102
問2
以下の10進数を2桁の補数表示の16進数に変換せよ。
-85, -28, -55, -123
問3
CA16+BC16
A516+AB16
6316+5E16
の結果を16進数で答えよ。また、Z, N, V, Cの値(ゼロか、負か、
オーバフローするか、キャリーがあるか)も答えよ。
問4
以下の10進小数を2進小数に変換せよ。
0.625, 0.3