情報科学概論2008 講義ノート(1)-(4)への追加 最大整数(1-3bit) • 正数だけで良いなら 1bitで {0,1} 2bitで {0,1,2,3} 3bitで {0,1,2,3,4,5,6,7} • 負の数も入れるには 2bitで {-2,-1, 0,1} 3bitで {-4, -3, -2, -1, 0, 1, 2, 3} 4bitで {-8,-7,-6,5,-4,-3,-2,-1, 0,1,2,3,4,5,6,7} 最大整数(1-3bit) • 正数だけで良いなら 1bit {0,1} 2bit {0,1,2,3} 3bit {0,1,2,3,4,5,6,7} 0 ~ (23-1) • 負の数も入れるには 2bit { -2,-1, 0,1} 3bit { -4,-3,-2,-1, 0,1,2,3} 4bit { -8,-7,...,-2,-1, 0,1,…,6,7} -23 ~(23-1) 要するにnビットでは • 正数だけで良いなら n-bit {0, 1, 2, 3,…., 2n-2, 2n-1} 0 ~ (2n-1) • 負の数も入れるには (n+1)-bit {-2n, -2n+1,…,-2,-1, 0,1,2, 3,… 2n-2, 2n-1} -2n ~ (2n-1) 問題 • 負数を2の補数で表現するとき、nビットで表 現できる整数の範囲を次の中から選択せよ。 a.- 2n-1 ~ 2n-1-1 b.- 2n-1 -1~ 2n-1 c.- 2n-1 ~ 2n-1 d.- 2n ~ 2n • 正解:a 解説 正解はaの「 - 2n-1 ~ 2n-1-1 」。 例えば、「負数を2の補数で表現するとき、8ビッ トで表現できる整数の範囲」を求める場合、 上記の公式から、 「-28-1~ 28-1 -1」 →「-27~27-1」 →「-128~127」。 問題 • 負数を2の補数で表すコンピュータで、2進数 の「10011001」を10進数に直した値を次の中 から選択せよ。なお、第0ビットが1の場合「負 の数」、0の場合「正の数」を表すとする。 • a.-101 b.-102 c.-103 d.+103 e.+105 • 正解:c • 解説 この2進数「10011001」は、第0ビットが1であるため、 「2の補数で表されたある値の負数」であることが分かる。 • 「10011001」の2の補数を求めることにより、元の値に戻せ る。 • 1の補数(ビットを反転)……01100110 2の補数(1の補数+1)……01100111 • 求めた2の補数「01100111」を10進数に直すと「103」となり、 初めの2進数「10011001」は103の負数「-103」を表してい ることになる。正解はcの「-103」。 論理シフト演算について (× 2n ) • 2進数で表した数(例えば11)を2倍するには 一桁左へずらせばよい(11→110::3→6) • 逆に2で割るには、一桁右へずらせばよい (110→11::6→3) 論理シフト、演算 • 2進数の全ビットを左右にずらすことを論理シフトと呼ぶ。 論理シフトを行うと、値は下記のように変化する。 • 左にnビットシフト : 2n倍になる 右にnビットシフト : 2-n倍(2nで割った値)になる • 従って、ビットをずらすだけで掛け算や割り算が行える • • 例:2進数「0101」を左に2ビットシフト (シフトした結果が2n倍(4倍)になることを確認) • 2進数010110進数に変換すると「0101」→「5」 • 2進数を左に2ビットシフト010100左へ2ビットずらし、空い たビットには「0」を入れる 結果、2n倍(4倍)の「20」であることが確認できる 問題 • 2進数で表された正の整数を64倍するには、 左に何ビットシフトすればよいのか次の中か ら選択せよ。ただし、シフトによるあふれ (オーバーフロー)は発生しないものとする。 • a.4 b.5 c.6 d.32 正解:c e.64 解説 2進数の値を64倍するには「64=26倍」であること から、左へ6ビットシフトすればよいことになります。正解は cの「6」です。 問題 • 数値を2進数で格納するレジスタを考える。このレジ スタに正の整数Yを格納し、その後、この値に対して 「3ビット左にシフトしてYを足す」操作を行った。シフ トによるオーバーフローは発生しないものとした場 合、レジスタの値はYの何倍になるか。次の中から 選択せよ。 • a.7 正解:c b.8 解説 まず左に3ビットシフトするため、レジスタの値 は元の数Yが「23倍=8倍」され、8Yとなります。そ c.9 してさらにYを足す操作があるため、「8Y+Y=9Y」 d.10 で元の数の9倍になります。正解はcの「9」です。 問題 • 2進数Aを2n倍するには、Aをnビット左にシフトすれ ば求まる。例えば、「A×10」は下記の計算式によっ て求めることができる。 • (Aをnビット左にシフトした値)+(Aを1ビット左にシ フトした値) • この計算式中のnビットに当てはまる値を次の中か ら選択せよ。 • a.3 正解:a b.4 解説 「A×10」を2のべき乗に分解すると、「A×(8+2)」 c.5 →「A×23+A×21」。この問題の「A×10」は、下記の計 d.6 算式により求めることができる。 (Aを3ビット左にシフトした値)+(Aを1ビット左にシフトし た値) 正解はaの「3」。 文字の表現 • コンピュータでは、数値のほかに文字も扱う ことができるが、「0」と「1」のビット列のデータ しか扱えないため、文字も「0」と「1」で記憶す る必要がある。 • 次の問題を参考に、「文字もビットで表す」こと を覚えておく。 問題 • 英字の大文字A~Zを表現するために最低限 必要なビット数を次の中から選択せよ。 • a.4 b.5 c.6 正解:b d.7 解説 英字のA~Zは26文字あるため、この26文字を表現す るために必要なビット数を求めます。「2進数nけたでは、2n種 類の文字を表すことができる」ことを覚えておきましょう。従っ て、「26文字」が2の何乗かを考えれば求められます。 24(16)<26<25(32) 4ビットでは16文字しか表現できません。5ビットでは32文字 まで表現できます。26文字を表現するためには、5ビットが必 要となります。正解はbの「5」です。 問題 • 64ビットで表現できる文字の種類は58ビット で表現できる文字の種類の何倍になるか、次 の中から選択せよ。 • a.16 b.32 正解:c c.64 解説 「2進数nけたでは、2n種類の文字を表すことが できる」ことを覚えていれば解ける問題です。64ビット d.128 で表現できる文字の種類は58ビットで表現できる文字 の種類の何倍になるかを求めるので、 264÷258 = 26(64) よって、64倍が正解となります。正解はcの「64」です。 まとめ ・基数変換の方法(2進数、8進数、10進数、16進数など) ・2の補数への変換方法 値の1と0を反転させる(1の補数) 反転させた値に1を足す(2の補数) ・論理シフト演算 左にnビットシフト : 2n倍 右にnビットシフト : 2-n倍(2nで割った値) ・文字の表現 2進数nけたでは、2n種類の文字を表すことができる
© Copyright 2024 ExpyDoc