情報科学概論 2007-(2)

情報科学概論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種類の文字を表すことができる