💻 ITパスポート | テクノロジ系

2の補数とは?

コンピュータが「マイナスの数」を2進数で表す方法。全ビット反転して1を足すだけで負の数が生まれる仕組み。

🎬 こんなシーンを想像
コンピュータに「−5を計算して」とお願いしたい。でもコンピュータが理解できるのは0と1だけ。マイナス記号もない。
どうやって「負の数」を2進数で表すのか?
…それが「2の補数」という方法!
🔢 2の補数の作り方(例:−5 を8ビットで表す) ① まず +5 を8ビット2進数で書く +5 = 0 0 0 0 0 1 0 1 ▼ ② 全ビット反転(0↔1 を入れ替え) 反転 = 1 1 1 1 1 0 1 0 ▼ ③ 1を加算(+1) −5 = 1 1 1 1 1 0 1 1 符号 ビット 1=負 これが −5 の2の補数表現

最上位ビット(左端)が 1 のとき負の数、0 のとき正の数。これを「符号ビット」と呼ぶ。

🗺️ 2の補数を作る2ステップ
① 全ビットを反転(0→1、1→0)
これが「1の補数」。00000101 → 11111010 のように全部入れ替える。
② 1を加算する
1の補数に 1 を足す。11111010 + 1 = 11111011 → これが2の補数(=−5)。
なぜ「2の補数」と呼ぶ?
2進数で「足すと繰り上がってゼロになる数」を補数という。2進数1ビットの基数は2なので「2の補数」。コンピュータはこの仕組みで加算回路だけで引き算もできる。
⚠️ ひっかけ注意ポイント
「1の補数」と「2の補数」を混同しやすい
1の補数=ビット反転だけ。2の補数=ビット反転+1を加算。試験では「どちらか」を問う選択肢が出る。
符号ビットを「値」として読まない
8ビット符号付き2進数で最上位ビットが 1 のとき、それは「128」ではなく「負の符号」。符号付き整数では最上位ビットは符号を示す。
0の表現が1つしかない
2の補数では 00000000 が 0 で、ただ1通り。1の補数では 00000000 と 11111111 の2通りの0が生じる問題があった。2の補数はこの問題を解決している。
🧠 覚え方(無理やりゴロ)
「反転して、いち(1)足す」2の補数
「ひっくり返して(反転)、いち(1)たす(加算)」の2ステップ

「2の」「補」「数」ツー(2)の、ほ(補)、スー(数) = 「ツーホースー → 頭ひっくりかえして一歩進む馬」
バカバカしい絵ほど頭に残る:頭(ビット)ひっくり返して、一歩(+1)進む
ITパスポート 詳細解説 / itp-twos-complement