2022 サンプル問題1テクノロジ系

基本情報 2022 サンプル問題 問1:テクノロジ系に関する問題

負数を2 の補数で表すとき,8 ビットの2 進正数n に対し-n を求める式はどれか。 ここで,+は加算を表し,OR はビットごとの論理和,XOR はビットごとの排他的論理 和を表す。

  • a(n OR 10000000) + 00000001
  • b(n OR 11111110) + 11111111
  • c(n XOR 10000000) + 11111111
  • d(n XOR 11111111) + 00000001正答
正答:D(n XOR 11111111) + 00000001

AI解説(初心者・標準・上級)

理解度に合わせて3レベルの解説を無料で読めます。

初心者向けまずはここから。やさしく要点を解説

答えは d「(n XOR 11111111) + 00000001」 です。

コンピュータの世界では「マイナスの数」をちょっと変わった方法で表します。それが「2の補数」です。

やり方はたった2ステップ:

1. ビットを全部ひっくり返す(0↔1)

2. 1を足す

たとえば 5 = `00000101` のマイナスを作るなら → ひっくり返して `11111010` → +1 して `11111011` がマイナス5。

XOR(エックスオア)は「違ったら1、同じなら0」になる演算で、XORで 11111111 を掛けるとビットが全部ひっくり返る便利技。だから XOR 11111111 + 00000001 が正解。

👉 覚え方: 「反転して +1」が2の補数の合言葉

ほかの選択肢: a・b・c は反転や足す数がズレてて、計算するとマイナスにならない。

標準試験対策の基準レベル

なぜこれが正解か

正解は d。2の補数は「1の補数(全ビット反転) + 1」で求める。

  • 全ビット反転は XOR 11111111 で実現できる(XOR は同値で0、異値で1なので、1とXORすると必ず反転)。
  • そこに + 00000001 することで2の補数が完成し、これが −n の表現になる。

例: n=00000101 (=5) なら、XOR 11111111 → 11111010、+1 → 11111011 (=−5)。

各選択肢の解説

  • a: OR 10000000 は最上位ビットを1にするだけ。残りビットは反転されないので −n にならない。
  • b: OR 11111110 は下位以外を全1にする操作で、反転とは異なる。+11111111 (=−1)を足しても整合しない。
  • c: XOR 10000000 は最上位ビットだけ反転(=符号反転に見えるが他のビットがそのまま)。これでは絶対値が変わってしまう。

覚え方・ひっかけ注意

「反転 + 1 = 2の補数」。XOR 11111111 = ビット反転、と覚えるのが鉄則。a の OR と c の XOR は紛らわしいが、ビット全反転は XOR 1...1 だけ。

上級誤答論破・背景理論まで深掘り

理論的背景

2の補数表現は、nビットで負数を表す際に −n ≡ 2^n − n (mod 2^n) という算術同値を利用する。1の補数 (2^n − 1 − n) は単純なビット反転で得られ、これに1を加えると 2^n − n となり、これが2の補数 −n の機械語表現となる。算術的には「ビット反転 = (2^n−1) との XOR」が成り立つため、+1 を加える操作とセットで負数生成式が完結する。

ハードウェア実装

CPU の ALU では減算 A−B を A + (Bの2の補数) = A + (¬B) + 1 として加算器で実現する。減算器を別途用意せず、入力Bを反転して桁上げ入力(Cin)を1にするだけで減算ができるため、回路面積を大幅に削減できる。これが2の補数が業界標準になった最大の理由。

表現範囲とオーバーフロー

8ビット2の補数の表現範囲は −128〜+127。負数最小値 −128 (=10000000) の2の補数を取ると同じ 10000000 になる(オーバーフロー)。これは絶対値表現できない唯一の例外で、INT_MIN のマイナス演算が未定義動作を引き起こすバグの原因となる(C言語の `INT_MIN * -1` 等)。

試験での位置づけ

基礎理論の超頻出単元。基本情報技術者試験では「2進数⇔10進数変換」「シフト演算による乗除算」「符号拡張(sign extension)」と組み合わせて出題される。応用情報以降では IEEE 754 浮動小数点の指数部バイアス表現と混同しない注意が必要。

選択肢の発展補足

  • 1の補数(ビット反転のみ)は古い計算機(UNIVAC 1100系等)で採用例があるが、+0 と −0 が両方存在する欠点があり廃れた。
  • ゼロ拡張 vs 符号拡張: 16ビット → 32ビット拡張時、符号付きは最上位ビットを複製し、符号なしは0埋めする。
  • 関連: NOT演算(`~n`)で1の補数を、`-n`演算子で2の補数を一発で得られる。アセンブラの NEG 命令も同じ動作。
出典・引用について

出典:IPA(情報処理推進機構)公式 基本情報技術者試験 2022 サンプル問題1/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。

テクノロジ系の他の過去問

1
テクノロジ系
2
テクノロジ系
3
テクノロジ系
4
テクノロジ系
5
テクノロジ系

あなたの弱点を診断して、合格までの最短ルートを

この分野を連続演習し、AIがあなたの弱点を分析。合格ナビなら基本情報の過去問を解きながら学べます。