2 の補数(負の数の表し方)の計算は、IPA 午前四択で繰り返し出題される定番です。手順そのものは単純でも、最大のつまずきは『負数をどう作るか』『何ビットで何の範囲まで表せるか』『桁あふれ(オーバーフロー)をどう見分けるか』の 3 点に集中します。型として機械的に整理すれば、確実な得点源に変えられます。
出発点は負数の作り方です。ある正の数を 2 の補数の負数に直すには、『全ビットを反転(0 と 1 を入れ替え)してから 1 を足す』だけです。例えば 8 ビットで +5 は 00000101。全ビットを反転すると 11111010、それに 1 を足すと 11111011 となり、これが −5 を表します。検算は簡単で、+5(00000101)と −5(11111011)を足すと桁あふれの 1 を除いて 00000000 = 0 になります。和が 0 になれば、その 2 つは正しく符号が逆の関係です。
次は表現できる数の範囲です。n ビットの 2 の補数では、最上位ビット(左端)が符号ビットの役割を持ち、0 なら正・0 以上、1 なら負を表します。表せる範囲は −2^(n−1) から +2^(n−1)−1 までで、8 ビットなら −128 から +127、16 ビットなら −32768 から +32767 です。正の側だけ 1 つ少ない(−128 はあるが +128 は無い)点が頻出の確認ポイントです。
仕上げは減算への応用とオーバーフローの判定です。コンピュータは引き算を『引く数の 2 の補数を足す』ことで実現します(A − B = A +(B の 2 の補数))。注意すべきは桁あふれで、同じ符号どうしの足し算で結果の符号が変わったらオーバーフローです。例えば 8 ビットで +127(01111111)に +1(00000001)を足すと 10000000 となり、正どうしの和なのに符号ビットが 1(負=−128)になっています。これがオーバーフローのサインで、符号が異なる数どうしの加算では決して起きない、と覚えておくと判定が速くなります。
練習問題: 8 ビットの 2 の補数表現で −6 を求めてください(ヒント: +6 を反転して 1 を足す)。また、正の数 100 と 50 を 8 ビットの 2 の補数で足すと、結果の符号にどんな問題が起きるでしょうか。過去問AI の AI コパイロットに『この 2 の補数の問題の解き方を教えて』と聞くと、ビット反転から桁あふれの判定まで手順がステップごとに表示されます。