平成20年 春期 基本情報技術者 午前 問4
数値を2進数で表すレジスタがある。
このレジスタに格納されている正の整数x を10倍にする操作はどれか。
ここで、シフトによるけたあふれは、起こらないものとする。
| ア | x を左に2ビットシフトした値にx を加算し、更に1ビット左シフトする。 |
| イ | x を左に2ビットシフトした値にx を加算し、更に2ビット左シフトする。 |
| ウ | x を左に3ビットシフトした値と、x を2ビット左シフトした値を加算する。 |
| エ | x を左に3ビットシフトした値にx を加算し、更に1ビット左シフトする。 |
【キーワード】
・レジスタ
・けたあふれ
【キーワードの解説】
- レジスタ
コンピュータのプロセッサ(CPU)が内部に持っている記憶装置で、最も高速なもの。
高速であるため、実現するのにコストが高く、容量は非常に少ない。
プロセッサでデータを処理する場合、他の記憶装置(主記憶)からレジスタに値を読み込んでから処理する。 - けたあふれ
コンピュータのプロセッサのレジスタには扱えるデータのサイズに制限があり、その制限を越えることを“けたあふれ”(オーバーフロー、Overflow)という。
けたあふれが発生すると、通常CPUはエラーを通知します。
スポンサードリンク
ビット演算の問題です。
10進数では1ビット(1けた)左シフトは10倍(1→10)に、1ビット(1けた)右シフトは1/10(10→1)にする処理です。
同様に2進数のときは1ビット左シフトで2倍、2ビット左シフトで4倍、1ビット右シフトで1/2、2ビット右シフトで1/4になりますので、2進数で10倍をするときは、どのようなシフト演算を組み合わせればよいかになります。
ビット演算、シフト演算はどのコンピュータ(CPU)でも処理が速いので、性能が低いCPUを使ったシステム(組込み系)のソフトウェア開発では重宝します。
例えば、変数x が奇数かを判断するときに(C言語で)
if((x % 2)==1)
と剰余演算を使って書く人がいると思いますが、
if((x & 0x1)==1)
と論理積演算を使って書いたほうが処理は速くなります。

