2進数・基数変換の可視化 — ビットをクリックして体感
2進数は「各桁の重み(右から 1・2・4・8…と2倍ずつ)の合計」でできています。下のビットをクリックしてオン/オフすると、10進数・16進数・8進数がリアルタイムに変化します。重みが合計されていく様子を見れば、基数変換の感覚が身につきます。「符号付き(2の補数)」に切り替えると、負の数の表し方も分かります。
↑ 上が「重み」、下が「ビット(クリックで反転)」
| 2進数 | |
|---|---|
| 10進数 | |
| 16進数 | |
| 8進数 | |
| 重みの合計(計算式) |
2進数は「重みの合計」でできている
10進数の 253 が「100が2個、10が5個、1が3個」なのと同じで、2進数も各桁が重みを持ちます。ただし重みは10倍ずつではなく、右から 1・2・4・8・16…と2倍ずつ。1が立っている桁の重みを足すと10進数になります。上の可視化で、ビットをオンにするたびにその重みが合計に加わるのが見えます。
16進数・8進数との関係
2進数4桁がちょうど16進数1桁、2進数3桁が8進数1桁に対応します。だから長いビット列も、区切って読めば短い16進数で表せます(メモリアドレスや色コード #FF8800 などでおなじみ)。上の表で、同じ数が2進・10進・16進・8進でどう表されるか見比べてください。
符号付き(2の補数)で負の数を表す
「符号付き(2の補数)」に切り替えると、先頭ビット(最上位)が負の重みになります(8ビットなら先頭は −128)。これにより −128〜+127 を表現でき、引き算を足し算の回路だけで計算できます。「先頭ビットが1なら負の数」というサインも、切り替えて確かめてください。仕組みの詳しい解説は 2進数と基数変換の記事 にあります。
🧮 数値を打ち込んで変換するなら:10進・2進・8進・16進を相互に一発変換できる 基数変換ツール が便利です。2進数の足し算やビット反転を担う論理ゲートは 論理回路シミュレータ で動かせます。自分で解いて身につけたいなら、ランダム出題・その場で採点の 基数変換 練習ツール も参考にしてください。
ビット数と表せる範囲
nビットで表せるパターンは 2n 通りです。符号なしなら 0〜2n−1、2の補数(符号付き)なら −2n−1〜2n−1−1 になります。
| ビット数 | 符号なし | 符号付き(2の補数) |
|---|---|---|
| 4 | 0〜15 | −8〜7 |
| 8 | 0〜255 | −128〜127 |
| 16 | 0〜65,535 | −32,768〜32,767 |
| 32 | 0〜4,294,967,295 | −2,147,483,648〜2,147,483,647 |
この範囲は、身近な数字の上限そのものです。IPアドレス(IPv4)の1つの区切りが0〜255なのは8ビットだから、ポート番号が0〜65535なのは16ビットだからです。IPv4アドレス全体は32ビット、MACアドレスは48ビット、IPv6アドレスは128ビットでできています。
桁あふれ(オーバーフロー)を試す
8ビット・符号なしで「全部1」(255)にしてから「+1」を押すと、表示は0に戻ります。9桁目に繰り上がった1が、8ビットの外にあふれて消えるためです。同じことを符号付きで試すと、127(01111111)に「+1」で −128(10000000)になります。プログラムで整数の計算結果がいきなり負の数になる不具合は、このしくみで起きます。
基本情報技術者試験ではこう出る
「2進数を10進数に」「10進数を2進数に」「2の補数で負の数を表す」「16進数⇔2進数」がよく問われます。重みの合計という考え方が身につくと、この手の変換問題は確実な得点源になります。関連:2進数と基数変換 / 論理回路 / 可視化一覧。
よくある質問
Q. 8ビットの符号付きは、なぜ+128ではなく+127まで?
A. 8ビットで表せるのは256通りで、そのうち半分の128通り(先頭ビットが1)が負の数、残りの128通りが0と正の数です。0が1つ分を使うので、正の数は1〜127の127個になります。
Q. 1バイトは何ビット?
A. 8ビットです。1バイトで0〜255の256通りを表せます。ファイルの大きさや通信量の単位で使われる「バイト」と、通信速度で使われる「ビット」(bps)は8倍違うので注意してください。