コンピュータにおける 数値表現と演算(1) 1. 2進数,10進数,16進数 2. 負の数の表現法(2の補数) (例) 10進表現と値としての解釈 123.45(10) =1×102+2×10+3+4×10-1+5×10-2 100の桁 10の桁 1の桁 0.1の桁 0.01の桁 p進表現(p:基数, base/radix) an-1an-2an-3・・・a2a1a0 .a-1a-2a-3・・・a-m (p) = an-1pn-1 + an-2pn-2 +・・・+a2p2+a1p1+a0 +a-1p-1+a-2p-2+・・・+a-mp-m (10) ただし 0≦ak≦p-1 1 2進数(binary number) • コンピュータで使われる表現方法(基数2) 1001(2) = 1×23 + 0×22 + 0×21 + 1×20 = 1×8 + 0×4 + 0×2 + 1×1 23の桁 22の桁 21の桁 20の桁 = 9 (10進数 decimal number) 注) 8=2x2x2=23 4=2x2=22 2=21 1=20 bit (binary digit,ビット) : 2進数1桁のこと 1001 は 4bit 10101101 は8bit (1byte) 1011011010100101 は16bit (2byte) 2進整数 1011(2) = 1×23+0×22+1×21+1×20 = 11(10) 0110 1001(2) = 0×27+1×26+1×25+0×24 +1×23+0×22+0×21+1×20 = 0×128+1×64+1×32+0×16 +1×8+0×4+0×2+1×1 = 105 (10) 1110 1000(2) = 1×128+1×64+1×32+0×16 +1×8+0×4+0×2+0×1 = 232 (10) 2 2進小数 10進数 0.356(10) = 3×10-1+5×10-2+6×10-3 = 3×(1/10)+5×(1/100)+6×(1/1000) 2進数 0.1001(2) = 1×2-1+0×2-2+0×2-3+1×2-4 = 1×(1/2)+0×(1/4)+0×(1/8)+1×(1/16) = 1×0.5+0×0.25+0×0.125+1×0.0625 = 0.5625(10) 2のべき乗 20=1 21=2 22=4 23=8 24=16 25=32 26=64 27=128 28=256 29=512 210=1024 211=2048 212=4096 213=8192 214=16384 215=32768 3 2-1=0.5 2-2=0.25 2-3=0.125 2-4=0.0625 2-5=0.03125 2-6=0.015625 2-7=0.0078125 2-8=0.00390625 2進数⇒10進数(整数) 214 212 210 28 26 24 22 20 215 213 211 29 27 25 23 21 1010 1001 1110 1000(2) = 1×215+0×214+1×213+0×212 +1×211+0×210+0×29+1×28 +1×27+1×26+1×25+0×24 +1×23+0×22+0×21+0×20 = 32768+8192+2048+256+128+64+32+8 = 43496 (10) 2進数⇒10進数(小数) 0.10011101(2) = 1×2-1+0×2-2+0×2-3+1×2-4+1×2-5+1×2-6+0×2-7+1×2-8 = 1×(1/2)+0×(1/4)+0×(1/8)+1×(1/16) +1×(1/32)+1× (1/64)+0×(1/128)+1×(1/256) = 1× + 0 × + 0× + 1× + 1× +1× + 0× + 1× = (10) 4 10進数⇒2進数(整数) 217(10)= 1101 1001(2) 217÷2=108 余り1 108÷2=54 余り0 54÷2=27 余り0 27÷2=13 余り1 13÷2=6 余り1 6÷2=3 余り0 3÷2=1 余り1 1÷2=0 余り1 最下位bit 第1bit 第6bit 最上位bit 10進数⇒2進数(小数) 0.3125 ⇒ 0.0101 ①② ③④ ① 0.3125x2=0 .625 ② 0.625x2=1 .25 ③ 0.25x2=0 .5 ④ 0.5x2=1 .0 5 10進→2進変換 (1) 整数部:2で割って,余りを並べる (2) 小数部:2を掛けて,整数部を並べる (1) の理由 X(10)=an-12n-1+an-22n-2+‥‥+a222+a121+a0 X (10)÷2=an-12n-2+an-22n-3+‥‥+a221+a1 余り a0 (X(10)÷2)÷2=an-12n-3+an-22n-2+‥‥+a2 ‥‥ (2) の理由 余り a1 ‥‥ Y(10)=a-12-1+a-22-2+‥‥+a-(n-1)2-(n-1)+a-n2-n Y(10)×2=a-1+a-22-1+‥‥+a-(n-1)2-(n-2)+a-n2-(n-1) a-1が整数部 (Y(10)×2)×2=a-2+a-32-1+‥‥+a-(n-1)2-(n-3)+a-n2-(n-2) a-2が整数部 ‥‥ ‥‥ 16進数による表現 2進数 1100 1010 0001 1000 1001 0010 0000 1101 C A 1 8 9 2 0 D 対応表 16進数 CA18920D(16) 0000=0 0001=1 0010=2 0011=3 0100=4 0101=5 0110=6 0111=7 6 1000=8 1001=9 1010=A 1011=B 1100=C 1101=D 1110=E 1111=F 16進数と2進数の相互変換 16進数⇒2進数 16進数1文字を2進数4bitで置き換える 2進数⇒16進数 2進数4bitを16進数1文字で置き換える 例: A5.F7 (16) ⇔ 1010 0101 . 1111 0111 (2) 10進→16進変換 (1) 整数部:16で割って,余りを並べる 1234(10) = 4D2(16) 1234÷16=77 余り 2 77÷16=4 余り 13 →D 4÷16=0 余り 4 (2) 小数部:16を掛けて,整数部を並べる 0.1234(10) = 0.1F9・・・(16) 0.1234×16=1.9744 0.9744×16=15.5904 0.5904×16=9.4464 ・・・ 7 整数部 1 整数部 15→F 整数部 9 負の数の表現(2の補数) 符号なし整数(8ビットの場合) 27 26 24 25 22 23 20 21 1 0 0 1 1 0 0 1 (=153) 2の補数表現(8ビットの場合) 最上位ビット(符号ビット)を -27 の重みをもつ桁と考える 26 -27 24 25 22 23 20 21 1 0 0 1 1 0 0 1 (=-128+16+8+1=-103) 注)16bit, 32bit の場合も最上位bitを符号bitと考える。 16bitの場合は最上位bitを-215,32bitの場合は-231と考える。 符号無し整数と符号付整数 8ビットの場合 符号付整数(正負の数) 0000 0000 =0 0000 0001 =1 : 正の数 : 0111 1110 =126 0111 1111 =127 1000 0000 =-128 1000 0001 =-127 : 負の数 : 1111 1101 =-3 1111 1110 =-2 1111 1111 =-1 符号無し整数(正の数) 0000 0000 =0 0000 0001 =1 : : 0111 1110 =126 0111 1111 =127 正の数 1000 0000 =128 1000 0001 =129 : : 1111 1101 =253 1111 1110 =254 1111 1111 =255 8 符号付整数(32bitの場合) 0000 0000 0000 0000 0000 0000 0000 0000 = 0 0000 0000 0000 0000 0000 0000 0000 0001 = 1 : : 0111 1111 1111 1111 1111 1111 1111 1110 = 2,147,483,646 0111 1111 1111 1111 1111 1111 1111 1111 = 2,147,483,647 (=231-1) 1000 0000 0000 0000 0000 0000 0000 0000 =-2,147,483,648 (=-231) 1000 0000 0000 0000 0000 0000 0000 0001 =-2,147,483,647 : : 1111 1111 1111 1111 1111 1111 1111 1110 =-2 1111 1111 1111 1111 1111 1111 1111 1111 =-1 2の補数の求め方(1) ◆ 方法1:2n から引く (n:表現するビット数) 8ビットの場合 例:-25の求め方 28から25を引く (n ビットの場合は 2n から引く) 1 0000 0000 (=28=256) -) 0001 1001 (=25) 1110 0111 (= -25) 注)この計算は0から25を引いているとも考えられる 9 2の補数の求め方(2) ◆ 方法2:ビットを反転して,最下位ビットに 1 を足す 例:-25の表現 25 = 0001 1001 ビット反転 1110 0110 最下位ビットに1を +)0000 0001 足す 1110 0111 (= -25) 検算: ビット反転 再度、ビット反転と 1の加算で元に戻る -(-X) = X 0001 1000 最下位ビットに1を +)0000 0001 足す 0001 1001 (= 25) 2の補数の求め方(3) 32bitの場合 注)ビット長に関わらず求め方は同じ 例:-165の表現 0000 0000 0000 0000 0000 0000 1010 0101 (=165) ビット反転 1111 1111 1111 1111 1111 1111 0101 1010 最下位ビット +) 0000 0000 0000 0000 0000 0000 0000 0001 に1を足す 1111 1111 1111 1111 1111 1111 0101 1011 (= -165) 符号bit 10 2の補数表現⇒10進数(整数の場合) 8bitの場合 方法1:1110 0101に対応する10進数 = -27+26+25+22+20 = -128+64+32+4+1= -27 方法2:1110 0101に対応する10進数 0001 1010 ビット反転 +) 0000 0001 最下位ビットに1を足す 0001 1011 (= 27) ビット反転と1の加算 で元に戻る -(-X) = X もとの数は -27 2の補数表現⇒10進数(小数を含む場合) コンピュータにおける補数表現は小数点の位置には無関係 例題:1110 0101 を符号ビットを含めて整数部4ビット,小数部4ビッ トの数値(1110.0101)とみなしたときの10進数値はいくらか ? 方法1:1110 0101に対応する10進数 = -23+22+21+2-2+2-4 = -8+4+2+0.25+0.0625= -1.6875 方法2:1110 0101に対応する10進数 整数値の1を足 すのではない 0001 1010 ビット反転 最下位ビットに1を足す +) 0000 0001 0001 1011 (= 20+2-1+2-3+2-4=1.6875) もとの数は -1.6875 11
© Copyright 2024 ExpyDoc