2の補数とは?にのほすう
2の補数とは、負数を、全ビットを反転して1を加えた値で表す2進数の表現方式。減算を加算回路だけで処理できるためCPUの演算器を単純化でき、符号付き整数の標準的な内部表現として使われる。nビットで表せる範囲は−2^(n−1)〜2^(n−1)−1と、正負が非対称になる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
符号ビットを別に持つ方式や1の補数では、+0と−0という同じ意味の値が二つできてしまい、比較のたびに例外処理が要った。さらに減算用の回路を加算回路とは別に用意する必要もあった。ビット反転して1を足すという定義に変えると、桁あふれを捨てるだけで加算がそのまま減算になり、ゼロも一つに収まる。回路を減らすための表現の工夫であり、応用情報では範囲とオーバーフローの計算で問われる。
具体例
8ビットで−3を作るなら、3の00000011を反転して11111100、1を足して11111101(16進のFD)になる。Javaのint型は32ビットの2の補数なので、最小値−2147483648は符号を反転しても同じ値のままという、この表現特有の挙動が観測できる。
試験での引っ掛け
1の補数と手順を取り違えやすい。反転までが1の補数、そこに1を加えたものが2の補数である。範囲も非対称で、8ビットなら−128は表せるが+128は表せない。また最上位ビットは符号を示すが、単純な符号ビットではなく重み−2^(n−1)を持つ点も、桁ごとの計算問題で効いてくる。
関連用語
出た過去問
出典:令和3年度 秋期 応用情報技術者試験 午前 問8(IPA)
演算レジスタが16ビットのCPUで符号付き16ビット整数x1, x2を16ビット符号付き加算(x1+x2)するときに、全てのx1, x2の組合せにおいて加算結果…
正解:x1とx2の符号が異なる場合
要点:異符号どうしの加算は絶対値が増えないのでオーバフローしない
16ビット符号付き整数の表現範囲は -32,768〜32,767 である。x1とx2の符号が異なる場合、和の絶対値は絶対値の大きい方以下になるため、必ず表現範囲に収まりオーバフローしない。一方、同符号どうしの加算では和が範囲外に出る可能性がある。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。