基本情報 平成24年度 春期 問1:テクノロジ系に関する問題
から問 50 までは, テクノロジ系の間題です。 問1 8 ビットの2 進数 11010000 を右に 2 ビット算術シフトしたものを, 00010100 から 減じた値はどれか。ここで, 負の数は2 の補数表現によるものとする。
- a00001000
- b00011111
- c00100000正答
- d11100000
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは c(00100000) です。
2の補数で 11010000 は10進数で-48。これを右に2ビット算術シフト(符号ビットそのまま、符号で埋める)すると 11110100=-12。次に 00010100(=20)から -12 を引くと 20-(-12)=32。32を8ビット2進で書くと 00100000。
👉 覚え方:算術シフト=符号を保ったまま割り算(÷2の倍数)。引き算は「足して2の補数」で。
ほかの選択肢:a 00001000=8/b 00011111=31/d 11100000=-32。計算ミスのパターン。
なぜこれが正解か
正解は c。
- 11010000を2の補数表現とみなすと値は-48(=10進数)。
- 右算術シフト2ビット(符号ビット=1を保持して左へ充填):11010000 → 11110100。10進では-12(-48÷4の結果)。
- 00010100(=20)から11110100(=-12)を減算:20 - (-12) = 32。
- 32を8ビット2進数で表すと 00100000。
各選択肢の解説
- a 00001000=8:算術シフトを論理シフトと取り違えた場合の値。
- b 00011111=31:減算で1ずれ。
- d 11100000=-32:符号を取り違えた誤り。
覚え方・ひっかけ注意
算術シフトは符号ビットを保つ(右シフトでは符号ビットで上位を埋める、論理シフトでは0で埋める)。負の数の引き算は「足して2の補数」で。2進数の算術問題はミスしやすいので筆算で2回確認。
理論的背景
2の補数表現は「正負を1つの体系で扱える」「加減算回路を共通化できる」「ゼロが一意(+0と-0が分離しない)」という利点から、現代のCPUの整数表現の標準。n ビットで -2^(n-1) ~ 2^(n-1)-1 の範囲を表現する。算術シフトは符号付き数の除算(2のべき乗除算)に相当し、右シフト1ビット=÷2、右シフト2ビット=÷4。一方、論理シフトは符号を考慮せず0で埋めるため、負数では値が大きく変わる。
実務での使われ方
CPU命令セットでは算術シフト(SAR: Shift Arithmetic Right)と論理シフト(SHR: Shift Logical Right)が別命令として用意される。C言語では符号付き整数の右シフトは処理系定義(多くの実装で算術シフト)、unsigned型では論理シフト。コンパイラ最適化では「除算をシフトに置き換え」(×2のべき乗・÷2のべき乗)でパフォーマンスを稼ぐ。グラフィックス・DSP処理ではシフト演算が頻出。
試験での位置づけ
基本情報・応用情報の基礎理論分野で必出。2の補数の計算、ビット演算(AND/OR/XOR/NOT)、シフト演算(算術/論理/循環)、符号付き/符号なし整数の範囲、浮動小数点数(IEEE 754)の構造(符号ビット・指数部・仮数部)が出題される。応用情報以上では誤差(情報落ち・桁落ち・打切り誤差・丸め誤差)まで深掘りされる。
選択肢の発展補足
論理シフトと算術シフトの違いは右シフト時のみ顕在化する(左シフトはどちらも0で埋める)。循環シフト(ROL/ROR)は最上位/最下位ビットを反対側に回送する操作で、暗号アルゴリズム(AES、SHA等)で多用される。1の補数表現(+0と-0が分離、現代では ほぼ使われない)、符号絶対値表現(古い表現法)、Excess-K表現(浮動小数点数の指数部)と比較整理しておくと理解が深まる。固定小数点演算、飽和算術(saturated arithmetic、オーバーフロー時に最大値で止める)、SIMD命令(SSE/AVX/NEON)はDSP・画像処理で重要。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成24年度 春期 問1/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。