進数変換早見表
0〜16 までは1つずつ、それ以降はプログラミングで実際によく目にする区切りの値だけを並べています。 2進数はツール本体と同じく4桁ごとに区切って表示しました。
| 10進 | 2進 | 8進 | 16進 |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
| 16 | 0001 0000 | 20 | 10 |
| 20 | 0001 0100 | 24 | 14 |
| 31 | 0001 1111 | 37 | 1F |
| 32 | 0010 0000 | 40 | 20 |
| 63 | 0011 1111 | 77 | 3F |
| 64 | 0100 0000 | 100 | 40 |
| 100 | 0110 0100 | 144 | 64 |
| 127 | 0111 1111 | 177 | 7F |
| 128 | 1000 0000 | 200 | 80 |
| 255 | 1111 1111 | 377 | FF |
| 256 | 0001 0000 0000 | 400 | 100 |
| 512 | 0010 0000 0000 | 1000 | 200 |
| 1,000 | 0011 1110 1000 | 1750 | 3E8 |
| 1,024 | 0100 0000 0000 | 2000 | 400 |
| 4,096 | 0001 0000 0000 0000 | 10000 | 1000 |
| 65,535 | 1111 1111 1111 1111 | 177777 | FFFF |
15・255・4095・65535 のように「すべての桁が F になる値」は、そのビット幅で表せる最大値です。 逆に 16・256・4096・65536 は桁が1つ増える境目で、16進数では 10・100・1000・10000 とキリの良い形になります。
2進数の位取り(ビットの重み)
10進数が右から 1・10・100 と10倍ずつ増えるのに対し、2進数は右から1・2・4・8 と2倍ずつ増えていきます。この「重み」さえ覚えていれば、2進数を10進数に戻すのは 1が立っているビットの重みを足すだけの作業です。たとえば 1101 は 8+4+1 で 13 になります。
| ビット位置 | 累乗 | 重み(10進) | 16進 |
|---|---|---|---|
| 第0ビット | 2^0 | 1 | 1 |
| 第1ビット | 2^1 | 2 | 2 |
| 第2ビット | 2^2 | 4 | 4 |
| 第3ビット | 2^3 | 8 | 8 |
| 第4ビット | 2^4 | 16 | 10 |
| 第5ビット | 2^5 | 32 | 20 |
| 第6ビット | 2^6 | 64 | 40 |
| 第7ビット | 2^7 | 128 | 80 |
| 第8ビット | 2^8 | 256 | 100 |
| 第9ビット | 2^9 | 512 | 200 |
| 第10ビット | 2^10 | 1,024 | 400 |
| 第11ビット | 2^11 | 2,048 | 800 |
| 第12ビット | 2^12 | 4,096 | 1000 |
| 第13ビット | 2^13 | 8,192 | 2000 |
| 第14ビット | 2^14 | 16,384 | 4000 |
| 第15ビット | 2^15 | 32,768 | 8000 |
逆向きの変換、つまり10進数から2進数を求めるときは、2で割った余りを記録しながら商が0になるまで割り続け、 最後に余りを下から読みます。13 であれば 13÷2=6余り1、6÷2=3余り0、3÷2=1余り1、1÷2=0余り1 となり、 下から並べて 1101 です。
ビット数と表せる値の範囲
n ビットで表せる値の個数は 2 の n 乗、符号なし整数としての最大値はそこから1を引いた値です。 「8ビットだから最大255」「16ビットだから最大65535」という数字は、この式から出てきています。
| ビット数 | 表せる個数 | 符号なし最大値 | よく使われる場面 |
|---|---|---|---|
| 1 ビット | 2 | 1 | 真偽値(0か1か) |
| 4 ビット | 16 | 15 | 16進数1桁(ニブル) |
| 8 ビット | 256 | 255 | 1バイト。RGBの1色、IPv4の1オクテット |
| 10 ビット | 1,024 | 1,023 | 1KiB = 2^10 バイト |
| 16 ビット | 65,536 | 65,535 | TCP/UDPのポート番号、Unicodeの基本多言語面 |
| 24 ビット | 16,777,216 | 16,777,215 | フルカラー(RGB各8ビット) |
| 32 ビット | 4,294,967,296 | 4,294,967,295 | IPv4アドレス、32ビット整数 |
| 64 ビット | 18,446,744,073,709,551,616 | 18,446,744,073,709,551,615 | 64ビット整数、メモリアドレス |
符号付き整数の場合は最上位ビットを正負の符号に使うため、範囲は −2^(n−1) 〜 2^(n−1)−1 になります。 8ビットなら −128〜127、32ビットなら −2,147,483,648〜2,147,483,647 です。 なお、このツールが扱えるのは 0 以上かつ 2^53−1 までの整数です。
16進数がカラーコードに使われる理由
16進数が便利なのは、1桁がちょうど2進数4桁に対応するからです。2進数と16進数の変換は4桁ずつ区切って読み替えるだけで済み、10進数のように筆算が要りません。 そして16進数2桁=2進数8桁=1バイトなので、バイト単位で扱うデータは16進数で書くと桁が揃います。
HTMLやCSSのカラーコード #RRGGBB はまさにこれで、赤・緑・青それぞれの明るさを1バイト(00〜FF、10進で0〜255)で表し、 3色ぶんを6桁に並べたものです。
| カラーコード | 色 | R | G | B |
|---|---|---|---|---|
| #FF0000 | 赤(red) | 255 | 0 | 0 |
| #00FF00 | 緑(lime) | 0 | 255 | 0 |
| #0000FF | 青(blue) | 0 | 0 | 255 |
| #FFFF00 | 黄(yellow) | 255 | 255 | 0 |
| #FFA500 | オレンジ(orange) | 255 | 165 | 0 |
| #00FFFF | 水色(aqua) | 0 | 255 | 255 |
| #FF00FF | マゼンタ(fuchsia) | 255 | 0 | 255 |
| #808080 | グレー(gray) | 128 | 128 | 128 |
| #FFFFFF | 白(white) | 255 | 255 | 255 |
| #000000 | 黒(black) | 0 | 0 | 0 |
#808080 のようにR・G・Bが同じ値だと無彩色(グレー)になり、値が大きいほど明るくなります。 3桁の省略記法(#F00)は各桁を2回繰り返した #FF0000 と同じ意味です。
8進数とファイルパーミッション
8進数は1桁がちょうど2進数3桁に対応します。Linux や macOS のファイル権限がchmod 755 のように3桁の8進数で書かれるのは、読み取り・書き込み・実行という3つの権限が ちょうど3ビットに収まるからです。3桁はそれぞれ左から所有者・グループ・その他のユーザーを表します。
| 8進1桁 | 2進3桁 | 記号 | 意味 |
|---|---|---|---|
| 0 | 000 | --- | 権限なし |
| 1 | 001 | --x | 実行のみ |
| 2 | 010 | -w- | 書き込みのみ |
| 3 | 011 | -wx | 書き込みと実行 |
| 4 | 100 | r-- | 読み取りのみ |
| 5 | 101 | r-x | 読み取りと実行 |
| 6 | 110 | rw- | 読み取りと書き込み |
| 7 | 111 | rwx | 読み取り・書き込み・実行すべて |
755 は「所有者はすべて可、グループとその他は読み取りと実行のみ」という意味になります。 644 なら「所有者は読み書き、ほかは読み取りのみ」で、これはテキストファイルの一般的な権限です。
よくある質問
- 10進数の255は2進数・16進数でどう表しますか?
- 255(10進数) = 1111 1111(2進数) = FF(16進数)です。255はコンピュータ(8ビット・1バイト)で表せる最大の整数で、RGBカラーの各色の最大値(255, 255, 255 = 白)としてよく使われます。
- 16進数の「FF」とは何ですか?
- FFは16進数で「15×16+15 = 255」を意味します。コンピュータのプログラムでは0xFF と表記することが多く、HTMLカラーコード(#FFFFFF = 白)やメモリアドレスにも使われます。
- 2進数で4桁ごとにスペースが入るのはなぜ?
- 4ビットで1ニブル(16進数1桁)に対応するため、4桁ごとに区切ると読みやすく、16進数との対応も直感的に分かります。
- 16進数の大文字・小文字はどちらが正しい?
- どちらも正しい表記です。プログラムのソースコードではスタイルによって使い分けます。CSSカラーコードは小文字(#ff0000)、Windowsのファイルシステムや一部の規格は大文字(0xFF)を使うことが多いです。
- なぜコンピュータは2進数を使うの?
- 電気回路の「オン(1)」と「オフ(0)」の2状態で数値を表すのが物理的に最もシンプルで信頼性が高いためです。8進数や16進数は2進数を人間が読みやすいようにまとめた表記です。
- IPアドレスの「192.168.0.1」は2進数でどう表しますか?
- 192 = 1100 0000、168 = 1010 1000、0 = 0000 0000、1 = 0000 0001 です。IPアドレスは4オクテット(各8ビット)で構成されます。サブネットマスク(255.255.255.0)も同様に2進数で理解するとネットワーク設計がわかりやすくなります。
- 8進数はどんな場面で使いますか?
- Linux/Unixのファイルパーミッション(chmod 755 など)で使われます。7 = 111(2進数) = 読み取り・書き込み・実行すべて許可、5 = 101 = 読み取りと実行のみ許可を意味します。
- プログラミングで16進数を使う理由は?
- メモリアドレス・カラーコード(#FF5733)・フラグビット(0x01, 0x02, 0x04...)など、2進数との相互変換が簡単なため広く使われます。16進数1桁は必ず2進数4桁(ニブル)に対応するため、視認性が高いです。
- 10進数を手計算で2進数に変換するには?
- 2で割った余りを記録しながら商が0になるまで割り続け、最後に余りを下から順に並べます。13なら 13÷2=6余り1、6÷2=3余り0、3÷2=1余り1、1÷2=0余り1 で、下から読んで 1101 です。
- 2進数を手計算で10進数に戻すには?
- 1が立っているビットの重み(1, 2, 4, 8, 16…)を足すだけです。1101 なら 8+4+0+1 = 13 になります。ビットの重みは右端から 2の0乗、2の1乗…と2倍ずつ増えていきます。
- 0xや0bというプレフィックスは何ですか?
- 数値がどの進数で書かれているかを示す接頭辞です。多くのプログラミング言語で 0x が16進数、0b が2進数、0o が8進数を表します。接頭辞が無い数値は10進数として扱われます。