2進法
一般にXを自然数としたときに、
X=ai・2i+ai−1・2i−1+・・・+a1・2+a0, ai=0 or 1
で表わせる。 このような表わし方を2進法、また2進法によって表わされた数
(0と1だけからなる)を2進数という。 以下、10進数と2進数との表記法
を次のように添え字(10、2)で区別する。
1310=11012
2進数 => 10進数 の変換
101010102=27+25+23+2=17010
別法
a3a2a1 =a3・22+a2・2+a1
=(a3・2+a2)・2+a1
例
11111010002
1・2+1=3
3・2+1=7
7・2+1=15
15・2+1=31
31・2+0=62
62・2+1=125
125・2+0=250
250・2+0=500
500・2+0=1000 答 1000
2進数 => 8進数 の変換
11111010002=(?)8
下位から3ビットづつ区切る。
1 111 101 000
1 7 5 0 => 100010 = 17508
2進数 => 16進数 の変換
16=24 => 2進数の4桁ごとに位が変わる、 また、10進法の,
10,11,12,13,14,15はそれぞれ、A、B,C,D,E、Fと表記する。
11 1110 1000
3 E 8 => 100010 = 3E816
10進数 => 2進数 の変換
例
25 = 2・12+ 1 余り= a1
12 = 2・6 + 0 a2
6 = 2・3 + 0 a3
3 = 2・1 + 1 a4
↑
a5
2510 = 110012
整数
16ビットで表わせる最大の整数
X=215+214+・・・+21+1
2X=216+215+・・・+22+2
X=2X−X=216−1=65536−1=65535
1ワード(16ビット)で表わせる数をaとすれば、
0≦a≦216−1=65535
となる。 これを符号無し整数(unsigned integer) という。
これでは負の数を表わせないので、
符号付き整数(signed integer) をa’として、次のように定義する。
−215=−32768≦a’<32768
かつ、
a<215のときは a=a’であり、
a≧215のときは a’=a−216 である。
このような表わしかたを2の補数表示という。 いまaは16ビット長なので、
215は一番左のビットが1であることを意味している。
このビットを符号ビットという。
符号ビット=0 => 0≦a’<215
符号ビット=1 => −215≦a’<0
例
1) 2の補数表示で 0000000011111111 は
27+26+・・・・+2+1=28-1=256-1=255
を表わす。
2) 1111111111111111は符号ビットが立っているので、216を引く。すなわち、
(216-1)-216=-1
全てのビットが1のときは−1を表わしている。
3) 1111111100000000 はやはり216を引くと、
(216-1)-(28-1)-216=-28=-256
となる。
いま、a’の全てのビットを逆転した数をb’とすると
a’+b’= 1111111111111111 = −1
となる。 すなわち、2の補数表示では
−a’= b’+1 となる。 このことは、引算は足し算の
装置を使って行えることを示している。
x−a’= x+(−a’)=x+b’+1
例 −1000を2の補数表示で表わせ
100010= 00000011111010002
-100010 = 1111110000010111+1
= 11111100000110002
実数(単精度浮動小数点表示)(N88Basicを例に)
計算機は実数を近似値としてしか扱えない。 1つの実数を2つ
の整数(a,bとする)で表わす。
a・2b (a,bとも2の補数表示)
aを仮数部、bを指数部といい、単精度浮動小数点表示ではaは24ビット、
bは8ビットとなっている。
例
1) a=30000,b=10 のとき 30000・210=30720000
2) 100000は 25000・22 であるから a=25000,b=2
3) 0.1 は?
0.1・226=6710895.2 なので0.1=6710895・2−26+0.2・2−26となる。
aを24ビット長の2の補数表示としたとき、a=6710895,b=-26 とすればよい。
この場合、有効桁数が7桁で0.2・2−26の誤差となる。
N進数とシフト演算
シフト演算:n進数の数をk桁分シフト(桁あふれはない)
・左シフト・・元の数のnk倍になる。
・右シフト・・元の数のn-k倍になる。
算術シフト:符号ビットは変わらない。
回転(循環)シフト:
・あふれたビット列が反対側の空ビット位にはいる。
論理シフト:
・シフト後の空ビット位に0がはいる。
例題:2進数の0.111は10進数ではいくらになるか。
0.1: 2-1=0.5
0.01: 2-2=0.25
+ 0.001: 2-3=0.125
0.111 = 0.875
問題 2進数の0.111111111は10進数ではいくらになるか。