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
© Copyright 2024 ExpyDoc