2進数と基数変換をやさしく図解 — 10進・2進・16進の変換と2の補数

公開: 2026年7月 カテゴリ: 基礎理論

「2進数の 1011 って10進でいくつ?」「2の補数って結局なに?」——コンピュータの数の扱いは、桁ごとの重みという考え方をつかめば一気にスッキリします。この記事では、2進数の仕組みから、10進⇔2進⇔16進の変換負の数を表す2の補数桁あふれまでを、図と手順で解説します。手を動かすなら 基数変換ツール論理回路シミュレータ も合わせてどうぞ。

なぜコンピュータは2進数なのか

コンピュータの中身は電気回路です。電気は「電圧が高い/低い」「スイッチのオン/オフ」という2つの状態を、いちばん確実に・誤りなく区別できます。もし10段階の電圧で0〜9を表そうとすると、少しのノイズで隣の値と間違えてしまいます。だから、状態が2つだけの2進数(0と1)が最も相性が良いのです。私たちがふだん使う10進数は「指が10本」という人間の都合、2進数は「回路の都合」——それだけの違いです。

10進・2進・16進の対応表

まずは0〜15の対応を眺めてください。ここに4桁の2進数=16進数1桁という関係が全部詰まっています。

10進2進16進10進2進16進
000000810008
100011910019
200102101010A
300113111011B
401004121100C
501015131101D
601106141110E
701117151111F

16進数では、10〜15を A〜F の1文字で表します。こうすると2進数4桁がちょうど16進数1桁に収まり、長いビット列を短く書けます。

2進数 → 10進数(重みを足すだけ)

10進数の 253 が「100が2個、10が5個、1が3個」であるのと同じように、2進数も桁ごとに重みを持っています。ただし重みは10倍ずつではなく、右から 1・2・4・8・16…と2倍ずつ増えます。1が立っている桁の重みを合計すれば10進数になります。

2進数 10110110 を10進数に直す(1の桁の重みを合計) 重み 1286432168421 ビット 10110110 1の桁 128321642 128 + 32 + 16 + 4 + 2 = 182 1が立っている桁の重みを足すだけ
図1: 各桁の重み(2倍ずつ)のうち、1の桁だけを合計すると10進数になる

10進数 → 2進数(2で割り続ける)

逆向きは、2で割って余りを下から読むのが定番です。商が0になるまで割り算を続け、余り(0か1)を最後から逆順に並べると2進数になります。

10進数 182 を2進数に直す(2で割って余りを下から読む) 182 ÷ 2 = 91余り0 91 ÷ 2 = 45余り1 45 ÷ 2 = 22余り1 22 ÷ 2 = 11余り0 11 ÷ 2 = 5余り1 5 ÷ 2 = 2余り1 2 ÷ 2 = 1余り0 1 ÷ 2 = 0余り1 下から 上へ読む 10110110 = 182
図2: 2で割った余りを下から上へ読むと 10110110。図1と一致する

2進数 ⇔ 16進数(4桁ずつ区切る)

2進数は桁が多くて読みにくいので、実務では16進数でよく表記します(メモリアドレス、色コード #FF8800、MACアドレスなど)。変換は簡単で、2進数を右から4桁ずつ区切り、各かたまりを対応表で1文字にするだけです。

2進数 10110110 → 4桁ずつ区切って16進数へ 1011 0110 = 8+2+1 = 11 = 4+2 = 6 B 6 B6
図3: 4桁ずつに区切れば、10110110 は 16進数で B6。逆に16進の各桁を4ビットに開けば2進数に戻せる

負の数はどう表す? — 2の補数

ここが基本情報の頻出ポイントです。コンピュータには「マイナス記号」がないので、ビットのパターンだけで負の数を表す工夫が必要です。それが2の補数(にのほすう)です。求め方はたった2ステップ。

手順1: すべてのビットを反転(0↔1を入れ替え。これを「1の補数」と呼びます)。
手順2: 1を足す。 これで「2の補数」= その数の符号を反転した表現になります。

8ビットで「5」から「−5」を作る(2の補数) 5 = 00000101 ①反転 11111010 ②+1 11111011 11111011 が「−5」。先頭ビット(最上位)が1なら負、というのが符号のサイン
図4: 反転して+1。先頭ビットが1なら負の数を表す(8ビットなら −128〜+127 を表現できる)

なぜこんな回りくどい方法を使うのでしょう? それは、引き算を足し算の回路だけで実現できるからです。8 − 58 + (−5) と同じ。−5を2の補数(11111011)で用意すれば、あとは普通に足すだけで正しい答えが出ます(あふれた桁は捨てる)。おかげでCPUは「引き算専用の回路」を持たずに済み、ハードウェアが単純になります。

2進数の足し算と桁あふれ(オーバーフロー)

2進数の足し算は10進数と同じ「繰り上がり」で計算します。ただし1 + 1 = 10(0を書いて1繰り上がり)です。決められたビット数(例:8ビット)に収まりきらない繰り上がりが出ることを「桁あふれ(オーバーフロー)」と呼びます。8ビットで 255 + 1 をすると、9桁目があふれて結果が 0 に戻ってしまう——これが「符号なし8ビットは0〜255まで」の理由です。

🧮 手を動かして確かめるなら:10進・2進・8進・16進を相互に一発変換できる基数変換ツールで、この記事の数値を打ち込んで答え合わせができます。さらに、2進数の足し算やビット反転を担うAND・OR・NOT・XORのふるまいは論理回路シミュレータで、入力0/1をクリックしながら体感できます。

基本情報技術者試験ではこう出る

科目Aでは、基数変換(「2進数 1101 を10進数で」)、2の補数(「−6を8ビットの2の補数で表すと?」)、2進数の加算とけたあふれ16進数⇔2進数が定番です。とくに2の補数は「反転して+1」の手順さえ体に入れれば確実に得点できます。ビットで考える力は、サブネットマスクの計算論理回路にも直結するので、ここで固めておくと後がラクになります。

よくある質問

Q. 「1の補数」と「2の補数」はどう違うの?
A. 1の補数は「全ビットを反転しただけ」。2の補数は「反転して、さらに1を足したもの」です。現在のコンピュータで負の数を表すのに使われるのは、原則2の補数です(0の表現が1通りに定まる・計算が素直、という利点があるため)。

Q. 8ビットの2の補数で表せる範囲は?
A. −128 〜 +127 です。先頭1ビットを符号に使うぶん、正の側は127までになります。ビット数がnなら範囲は −2ⁿ⁻¹ 〜 2ⁿ⁻¹ − 1 です。

Q. 8進数(0〜7)はどこで使う?
A. Linuxのファイル権限(chmod 755 など)が代表例です。3ビットがちょうど8進数1桁に対応するため、rwx(読み・書き・実行)の3ビットを1桁で表せて便利だからです。権限まわりはchmod計算ツールで確認できます。

まとめ

2進数は「桁ごとの重みが2倍ずつ」——これさえ押さえれば、10進への変換も、2の補数も、16進との行き来もすべて同じ土台の上の話です。2進→10進は重みの合計、10進→2進は2で割って余りを下から、16進は4桁ずつ、負の数は反転+1。手順を覚えたら、ツールと可視化で答え合わせをして定着させましょう。

関連ページ: 基数変換ツール論理回路シミュレータchmod計算サブネットマスクの計算記事一覧