コンピュータ科学入門

15/01/16
コンピュータ科学入門
第12回
小テスト
①  負の数を2の補数で表現する場合,8ビットの2進数
「10110100」を10進数で表すといくらか.
②  負の数を2の補数で表現する場合,-49を8ビットの2進
数で表しなさい.
③  nビットの符号なし2進数で表現できる10進数の最大値
と最小値を求めなさい.
④  nビットの符号あり2進数で表現できる10進数の最大値
と最小値を求めなさい.ただし,負の数を2の補数で表現
するものとする.
1
15/01/16
算術左シフト
v  先頭ビット(符号ビット)は動かさない
v  残りの部分を左にシフトする
v  あふれたビットは捨て,空いたところには0
を入れる
8ビットのビット列「11101001」を左に2ビット算
術シフトし,シフト前とシフト後の結果がどう変
わったかを確認しよう.
算術右シフト
v  先頭ビット(符号ビット)は動かさない
v  残りの部分を右にシフトする
v  あふれたビットは捨て,空いたところには符
号ビット(と同じもの)を入れる
8ビットのビット列「10010010」を右に1ビット算
術シフトし,シフト前とシフト後の結果がどう変
わったかを確認しよう.
2
15/01/16
コンピュータによるかけ算
シフト演算とたし算の合わせ技で実現できる
例えば,5x=4x+x=22x+xなので,
「もとの数xを2ビット左にシフトしたもの(4x)」と
「自分(x)」をたし算すればいい
コンピュータによる割り算
v  割り算を引き算で表現してみる
a÷b=c
aからbをc回引いたら0になる
割り算もシフト演算とたし算で表現できる!!
3
15/01/16
コンピュータによる割り算
11110 ÷ 101
30 ÷ 5 を2進数で計算
11110を超えない範囲でできるだけ101を左シフト
101 → 10100
2ビット左シフト
11110から10100をひく
11110 – 10100 = 1010
コンピュータによる割り算
1010を超えない範囲でできるだけ101を左シフト
101 → 1010
1ビット左シフト
1010から1010をひく
1010 – 1010 = 0
4
15/01/16
コンピュータによる割り算
11110を超えない範囲でできるだけ101を左シフト
101 → 10100
2ビット左シフト
もとの数「11110」から「101」の22倍の数
をひいた
もとの数「11110」から「101」を22回ひい
た → その結果は「1010」
コンピュータによる割り算
1010を超えない範囲でできるだけ101を左シフト
101 → 1010
1ビット左シフト
もとの数「1010」から「101」の21倍の数
をひいた
もとの数「1010」から「101」を21回ひい
た → その結果は「0」
5
15/01/16
コンピュータによる割り算
トータルすると・・・
もとの数「11110」から「101」を22+21回ひいた
22+21 = 6
【演習】 99 ÷ 11を2進数を使って計算しよう.
小テスト
①  もとの数を32倍するにはどのようなシフト演算を行
えばよいか.
②  6ビットの2進数「001101」を2ビット論理左シフトし
た結果を10進数に直すといくらか.
③  論理左シフトで1があふれるとどうなるか.
④  論理右シフトで1があふれるとどうなるか.
6