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 = 32+8+2 = 42 10進 2進 16進 8進 0 0000 0 00 1 0001 1 01 2 0010 2 02 3 0011 3 03 4 0100 4 04 5 0101 5 05 6 0110 6 06 7 0111 7 07 8 1000 8 10 9 1001 9 11 10 1010 A 12 11 1011 B 13 12 1100 C 14 13 1101 D 15 14 1110 E 16 15 1111 F 17 2進:1ビットで1桁 8進:3ビットで1桁 16進:4ビットで1桁 240 1099511627776 T(テラ)ほぼ1012 232 4294967296 230 1073741824 G(ギガ)ほぼ109 224 16777216 220 1048576 M(メガ)ほぼ106 216 65536 64K 210 1024 K(キロ)ほぼ103 28 256 1バイトで表現できるもの 24 16
負の数の表し方 (1)補数表示: two’s complement 2の補数、先頭ビットだけが負 (2)絶対値表示:signed magnitude 先頭ビットが符号で残りが絶対値 (3)反転表示: one's complemnet xのビットを反転したものが「-x」 (4)下駄履き表示:biased representation 「x+下駄」の形 符号なし数 (1) (2) (3) (4) nビットの場合: 0 0000 0 0 0 -8 先頭のビットの値をsとし 1 0001 1 1 1 -7 それ以降のビットが表す値 2 0010 2 2 2 -6 をxとしたとき、 3 0011 3 3 3 -5 (1)の値は 4 0100 4 4 4 -4 -2n-1s+x = (-2n+2n-1)s+x 5 0101 5 5 5 -3 = -2ns+(2n-1s+x) 6 0110 6 6 6 -2 (2)の値は 7 0111 7 7 7 -1 (-1)sx 8 1000 -8 -0 -7 0 (3)の値は((1)との差はs) 9 1001 -7 -1 -6 1 -2n-1s+x+s 10 1010 -6 -2 -5 2 (4)の値は(2n-1が下駄) 11 1011 -5 -3 -4 3 2n-1s+x-2n-1 12 1100 -4 -4 -3 4 13 1101 -3 -5 -2 5 (1)〜(3)の場合、先頭の 14 1110 -2 -6 -1 6 ビットは「符号ビット」 15 1111 -1 -7 -0 7 (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
nビットの補数表示の値をmビット(n<m)の補数表示 にする場合は符号ビットを左に延ばせばよい(符号拡張) 補数表示(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 1111 1111 1111 1111 1111 1111 11102 = 2,147,483,64610 0111 1111 1111 1111 1111 1111 1111 11112 = 2,147,483,64710=231-1 1000 0000 0000 0000 0000 0000 0000 00002 = -2,147,483,64810=-231 1000 0000 0000 0000 0000 0000 0000 00012 = -2,147,483,64710 1111 1111 1111 1111 1111 1111 1111 11012 = -310 1111 1111 1111 1111 1111 1111 1111 11102 = -210 1111 1111 1111 1111 1111 1111 1111 11112 = -110
(x)10 = (bnbn-1…b2b1b0)2= bn 2n + bn-1 2n-1+…+ b2 22 + b121 + b020 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 … 余り 2) 42 0 2) 21 1 2) 10 0 5 1 2) 2 0 2) 1 1 4210 = 1010102 128,64,32,16,8,4,2,1 の和で42になる ものを探せば、 32+8+2=25+23+21
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 . . 循環小数
減算は補数の加算として実行される(3-5=3+(-5), 3-(-5)=3+5) 2進数の加減算 減算は補数の加算として実行される(3-5=3+(-5), 3-(-5)=3+5) 3+4=7 3+5=? 3+-5=-2 3+-2=1 0011 0011 0011 0011 +0100 +0101 +1011 +1110 0111 1000 1110 10001 -3+-4=-7 -3+-5 -3+-6=? 1101 1101 1101 +1100 +1011 +1010 11001 11000 10111 ・左端のビットから繰り上げ られるビットはキャリー と呼ばれる(図の1) ・正+正=負、負+負=正 の場合はオーバフロー (図の?) ・符号ビットへの繰り上げと 符号ビットからの繰り上げ (キャリー)が等しくなけ ればオーバフロー
2つの数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の補数) の結果 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