進数変換 計算ツール|10進⇔2進⇔8進⇔16進を一括変換・実務ガイド
10進数を2進(binary)・8進(octal)・16進(hexadecimal)に瞬時に変換。カラーコード変換、UNIXパーミッション、メモリアドレス、IPv4/IPv6アドレスの2進展開まで幅広く対応します。基本情報技術者試験・応用情報技術者試験、組込みソフトウェア開発、ネットワーク設計、Web開発(CSSカラー)などで頻用される基礎概念を、情報処理推進機構(IPA)の公式試験基準に照らして解説します。
進数変換 計算機
計算式と基本概念
N進数の一般式
数値 = Σ(桁の値 × 基数の桁位置乗)
N進数(N-ary)は、N個の数字と桁位置の重みで数を表現する記数法です。基数(radix)がNなら、各桁は右から順に N⁰=1, N¹=N, N²=N², N³=N³... の重みを持ちます。10進数「1234」= 1×10³ + 2×10² + 3×10¹ + 4×10⁰ という位取り記数法は、2進・8進・16進でも同じ考え方が適用されます。
各進数の数字集合
2進(binary): 0, 1
8進(octal): 0, 1, 2, 3, 4, 5, 6, 7
10進(decimal): 0-9
16進(hexadecimal): 0-9, A(=10), B(=11), C(=12), D(=13), E(=14), F(=15)
16進では10〜15をA〜Fのアルファベットで表します。大文字・小文字どちらも許容されますが、可読性のためカラーコードでは大文字、URLエンコーディングでは小文字が主流です。
プログラミング言語での表記
C/C++/Java/JS: 2進 0b1010、8進 012 または 0o12、16進 0xAC
Python: 0b1010、0o12、0xAC。ビルトイン関数 bin()/oct()/hex()
HTML/CSS: 16進カラー #FF0000、URLエンコード %20 (空白)
2進・8進・10進・16進の違い
| 記数法 | 基数 | 1桁で表現できる値 | 主用途 | 2進換算 |
|---|---|---|---|---|
| 2進(binary) | 2 | 0-1 | CPU回路・機械語 | 1ビット |
| 8進(octal) | 8 | 0-7 | UNIXパーミッション | 3ビット |
| 10進(decimal) | 10 | 0-9 | 日常計算 | 約3.32ビット |
| 16進(hex) | 16 | 0-F(0-15) | メモリ・カラー | 4ビット |
2進数は桁数が長くなりがちなため、実務では4ビットを1桁の16進にまとめる、または3ビットを1桁の8進にまとめて表記します。CPUのメモリアドレスは32/64ビットで長いため、16進表記が世界的な実務標準です。
主要値の進数変換表(0〜32)
| 10進 | 2進 | 8進 | 16進 | 用途例 |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | NUL文字 |
| 7 | 111 | 7 | 7 | UNIX権限 rwx |
| 8 | 1000 | 10 | 8 | 1バイトの半分 |
| 10 | 1010 | 12 | A | LF(改行) |
| 13 | 1101 | 15 | D | CR(復帰) |
| 15 | 1111 | 17 | F | 4ビット最大 |
| 16 | 10000 | 20 | 10 | 16進の桁繰り上がり |
| 32 | 100000 | 40 | 20 | 空白文字 |
| 64 | 1000000 | 100 | 40 | @文字 |
| 128 | 10000000 | 200 | 80 | ASCII最大の次 |
| 255 | 11111111 | 377 | FF | 1バイト最大 |
| 1024 | 10000000000 | 2000 | 400 | 1 KiB |
| 65535 | 1111111111111111 | 177777 | FFFF | 2バイト最大 |
| 1048576 | 100000000000000000000 | 4000000 | 100000 | 1 MiB |
| 16777215 | 111111111111111111111111 | 77777777 | FFFFFF | フルカラーRGB最大値 |
16進6桁(0xFFFFFF)がフルカラーの上限になるのは、RGB各成分が8ビット(0-255)ずつで合計24ビットのため。プロ用画像編集(Adobe Photoshop)では16ビット/成分の48ビット深度も扱えます。
ビット幅と扱える数値範囲
| ビット | 16進表示 | 無符号 最大値 | 符号付き 範囲 | 用途 |
|---|---|---|---|---|
| 4 | F | 15 | -8 〜 +7 | ニブル(半バイト) |
| 8 | FF | 255 | -128 〜 +127 | 1バイト・ASCII |
| 16 | FFFF | 65,535 | -32,768 〜 +32,767 | Short整数 |
| 32 | FFFFFFFF | 約42億 | ±約21億 | IPv4・Int32 |
| 64 | FFFFFFFFFFFFFFFF | 約1,844京 | ±約922京 | Long整数・タイムスタンプ |
| 128 | 128桁分 | 約3.4×10³⁸ | — | IPv6・UUID |
変換の手計算方法
10進→2進 変換
10進を2で割り、商と余りを繰り返します。余りを下から順に並べたものが2進表記。例: 13 → 13/2=6余1 → 6/2=3余0 → 3/2=1余1 → 1/2=0余1 → 下から並べて1101。
2進→10進 変換
各桁を「桁の値 × 2^位置」で加算。例: 1101 = 1×8 + 1×4 + 0×2 + 1×1 = 13。
2進↔16進 変換
2進を右から4桁ずつ区切ると16進の1桁に対応。例: 11010110 → 1101/0110 → D/6 → D6。逆に16進の各桁を4桁の2進に展開すれば逆変換完了。
2進↔8進 変換
2進を右から3桁ずつ区切ると8進の1桁に対応。例: 11010110 → 011/010/110 → 3/2/6 → 326。8進はUNIXパーミッション(rwxrwxrwx→9ビット=3桁の8進)に向いています。
10進→16進 変換
10進を16で割り、商と余りを繰り返します。余り10〜15はA〜Fで表記。例: 255 → 255/16=15余15(F) → 15/16=0余15(F) → 下から並べてFF。
カラーコード(16進)の見方
HTMLやCSSで使う #RRGGBB 形式のカラーコードは、赤(R)・緑(G)・青(B)の各成分を0〜255の16進(00〜FF)で表現します。
| 色名 | 16進 | R(10進) | G(10進) | B(10進) |
|---|---|---|---|---|
| 白 | #FFFFFF | 255 | 255 | 255 |
| 黒 | #000000 | 0 | 0 | 0 |
| 赤 | #FF0000 | 255 | 0 | 0 |
| 緑 | #00FF00 | 0 | 255 | 0 |
| 青 | #0000FF | 0 | 0 | 255 |
| 黄 | #FFFF00 | 255 | 255 | 0 |
| 灰(中間) | #808080 | 128 | 128 | 128 |
| オレンジ | #FFA500 | 255 | 165 | 0 |
W3C勧告のCSS Color Moduleで正式に定義されており、Webデザインの基本表記です。3桁短縮形(#FFF = #FFFFFF)、8桁形(#RRGGBBAA = 透明度付き)もサポートされます。
実務例で見る進数変換
例1: CSSカラーコード #3B82F6(Tailwind Blue-500)
#3B82F6 は R=3B(=59), G=82(=130), B=F6(=246)。RGB(59, 130, 246)の青。rgb(59 130 246)とCSS3表記でも同じ色になります。デザインツール(Figma/Sketch/Adobe XD)は16進とRGB両方を表示するため、相互変換の理解が必須です。
例2: UNIXパーミッション 755 の意味
8進の755 = 111 101 101(2進9桁) = rwx r-x r-x。所有者は読み書き実行、グループとその他は読み実行のみ。Webサーバのファイル権限で chmod 755 index.html は標準的な設定です。644は所有者rw、他はr-のみで、テキストファイル向け。
例3: メモリアドレス 0x7FFF5FBFF8AC
64ビットプロセスのスタックアドレス例。16進12桁 = 48ビット(x86-64は48ビットの仮想アドレス空間)。デバッガのポインタ表示、Wireshark等のプロトコルアナライザで頻出。10進表記だと約 140兆 の値になり、非現実的です。
例4: IPv6アドレス 2001:db8::1
省略前は 2001:0db8:0000:0000:0000:0000:0000:0001(16進4桁×8)。連続する0のブロックは::で1回だけ省略可能。128ビットを2進で書くと128桁、10進なら約38桁の巨大数のため16進表記が実務標準です。
例5: SHA-256 ハッシュ値 c3ab8ff13720e...
SHA-256は256ビットのハッシュ値を生成し、16進64桁で表示。データ整合性チェック、パスワードハッシュ(bcrypt等の派生)、ブロックチェーンの取引ID等で頻用。1文字違うだけでハッシュが全く変わる(雪崩効果)ため、改ざん検出に有効です。
業界での応用
Webデザイン・CSS
HTML/CSSのカラーコード #FF0000 は16進で赤(R=255,G=0,B=0)を意味。デザインツールとブラウザ表示の統一表記。W3C CSS Colorモジュール準拠。RGB→HSL/HSV変換も色設計で頻用。
UNIX/Linuxパーミッション
ファイル権限 rwxrwxrwx は9ビット=3桁の8進で表現。chmod 755 は所有者7(rwx), グループ5(r-x), その他5(r-x)。UNIX/Linux/macOSシステム管理者の基礎知識。POSIX標準準拠。
ネットワーク・IPアドレス
IPv4は32ビットを8ビット×4に分けた10進表記(192.168.1.1)、内部処理では2進・16進で扱う。IPv6は128ビットを16ビット×8に分けた16進表記(2001:db8::1)。RFC 791/4291準拠。
組込み・マイコン開発
マイコンのレジスタ設定・メモリマップ・GPIOビット操作で16進が標準。ARM Cortex-M、AVR、PICで REG = 0xAB のような記述が多用。IPA組込みスキル標準(ETSS)対応。
基本情報技術者試験・応用情報
IPA主催の国家試験。午前問題「基礎理論」で2進・16進変換、2の補数、シフト演算が毎年10問前後出題。過去問演習でパターン学習が有効。
データベース・文字コード
Unicode/UTF-8はコードポイントをU+16進表記(例: U+3042「あ」)。データベースのバイナリ型・BLOB表示、SHA/MD5ハッシュ値の表現も16進。ISO/IEC 10646準拠。
2の補数と符号付き整数
コンピュータで負の整数を表す標準的な方式が2の補数(two's complement)です。全ビットを反転(1の補数)してから1を足すと符号が反転します。8ビット符号付き整数の範囲は −128〜+127、16ビットは −32,768〜+32,767、32ビットは −2,147,483,648〜+2,147,483,647です。C言語のsigned charやJavaのbyteもこの方式を採用しています。
| 10進 | 2進(8ビット) | 16進 |
|---|---|---|
| +127 | 01111111 | 7F |
| +1 | 00000001 | 01 |
| 0 | 00000000 | 00 |
| −1 | 11111111 | FF |
| −2 | 11111110 | FE |
| −128 | 10000000 | 80 |
最上位ビット(MSB)は符号ビットと呼ばれ、0が正、1が負を意味します。加減算は符号ビットも含めて通常どおり加算し、あふれた桁を捨てるだけで正しい結果になるのが2の補数の設計上の利点です。そのため、負の数を16進で見ると −1 が FF、−128 が 80 のように、直感とは逆の並びになる点に注意してください。
ビット演算(AND/OR/XOR/NOT/シフト)
ビット単位の論理演算は、フラグ管理・マスク処理・暗号・画像処理・組込みのレジスタ制御など、低レイヤの実装で必須の技術です。
| 演算 | 記号(C/Java/JavaScript) | 意味 | 例 |
|---|---|---|---|
| AND | & | 両方が1のとき1 | 0xFF & 0x0F = 0x0F |
| OR | | | どちらかが1なら1 | 0xF0 | 0x0F = 0xFF |
| XOR | ^ | 異なるとき1 | 0xFF ^ 0x0F = 0xF0 |
| NOT | ~ | 全ビット反転 | ~0x000000FF = 0xFFFFFF00(32ビット) |
| 左シフト | << | ビットを左へ(×2ⁿ) | 1 << 3 = 8 |
| 右シフト | >> | ビットを右へ(÷2ⁿ) | 16 >> 2 = 4 |
実務では「特定のビットが立っているか判定する」はANDとマスク、「特定のビットを立てる」はORで対象ビットに1、「特定のビットを反転する」はXORで対象ビットに1、「特定のビットを消す」はANDに反転マスク、という定番パターンが決まっています。左シフトは2倍、右シフトは2分の1に相当するため、掛け算・割り算の高速化にも使われます。
2の累乗と16進の桁数
2のべき乗の値は、メモリサイズ・配列長・データ型の上限として頻出します。16進で書くと桁の切りの良さが一目で分かります。
| 指数 | 2ⁿ(10進) | 16進 | 用途の例 |
|---|---|---|---|
| 2⁴ | 16 | 0x10 | 16進1桁で表せる状態数 |
| 2⁸ | 256 | 0x100 | 1バイトの状態数 |
| 2¹⁰ | 1,024 | 0x400 | 1KiB(キビバイト) |
| 2¹⁶ | 65,536 | 0x10000 | 符号なし16ビット・UTF-16のBMP |
| 2²⁰ | 1,048,576 | 0x100000 | 1MiB |
| 2³² | 4,294,967,296 | 0x100000000 | 32ビット整数・IPv4アドレス空間 |
| 2⁶⁴ | 約1.8×10¹⁹ | 0x10000000000000000 | 64ビット整数の上限 |
16進の1桁が4ビットに対応するため、2の累乗は指数が4の倍数のところで「1のあとに0が並ぶ」きれいな16進表記になります。2¹⁰ = 0x400 のように4の倍数でない指数では先頭が4・8になる点も覚えておくと、桁の見積もりが速くなります。
よくある間違い・注意点
- 16進のA-Fを大文字/小文字で書き間違え — 16進の10〜15はA〜F(またはa〜f)。カラーコードは慣習的に大文字、URLエンコーディングは小文字。混在してもデコードは可能ですが、可読性のため統一する。
- 基数プレフィックスの書き忘れ — 「10」だけでは2進の2か10進の10か16進の16か判別不能。C言語で
0b,0o,0xを付ける、または添え字を明示。 - 10進の桁数と2進の桁数の見誤り — 10進1桁 ≒ 3.32ビット。10進の「100」は2進で7桁(1100100)、10進の「1000」は10桁(1111101000)必要。桁数感覚を身につける。
- 2進から16進変換で桁区切り違い — 右(最下位)から4桁ずつ区切る。左から区切ると桁ずれが発生。例: 11010110は1101/0110 = D6であって、110/1011/0 ではない。
- 負数の扱い — 通常の進数変換は正の整数のみ。負数を扱う場合は「2の補数」で表現し、ビット幅を明示する必要があります。
- 小数点以下の変換 — 10進の小数(例: 0.1)は2進では無限循環小数になり、有限ビットで表現すると誤差が出ます(IEEE 754浮動小数点の話題)。整数変換とは別扱い。
- JavaScriptのビット演算の32ビット制限 — JSの&, |, ^, ~などのビット演算子は32ビット整数として扱うため、2^31以上の値では想定外の結果に。BigIntで対応可能。
関連する規格・法令
- JIS X 0021 ― 情報処理用語―数学演算。2進・10進・16進の演算、桁上げ、補数の定義。
- JIS X 0201 ― 7ビット及び8ビットの情報交換用符号化文字集合。ASCII/JIS X 0201の文字コード。
- ISO/IEC 10646 ― Universal Coded Character Set (UCS)。Unicodeの基盤規格。
- RFC 791 / RFC 4291 ― IPv4 / IPv6のアドレス構造。10進・16進による表現。
- W3C CSS Color Module ― HTMLカラーコードの公式仕様。16進RGB表記の標準。
- POSIX (IEEE Std 1003.1) ― UNIX/Linuxの標準API。ファイルパーミッションの8進表現。
- 情報処理技術者試験基準(IPA) ― 基本情報・応用情報の出題範囲。基礎理論分野で進数変換が必修。
- IEEE 754 ― 浮動小数点数の国際規格。仮数部・指数部の2進表現。
- RFC 3986 ― URI: Generic Syntax。URLエンコードでの16進%表記の仕様。
- ISO/IEC 9899 ― C言語の国際標準規格。ビット演算子・16進リテラルの定義。
参考文献・公的資料
より正確な仕様や試験対策情報を確認したい場合は、以下の公的機関の資料を参照してください。
- 情報処理推進機構(IPA) 基本情報技術者試験 ― 国家試験の公式情報。出題範囲・過去問題・解答例。基礎理論(進数変換)の必修範囲。
- 日本産業標準調査会(JISC) ― JIS X 0021(情報処理用語)、JIS X 0201(情報交換用符号)などの規格索引。
- W3C CSS Color Module Level 4 ― HTMLカラーコードの公式仕様。16進RGB、RGB()、HSL()、hsl()の定義。
- RFC 791 - Internet Protocol (IPv4) ― IPv4アドレス構造。32ビットを8ビット×4オクテットで表現。
- RFC 4291 - IPv6 Addressing Architecture ― IPv6アドレスの128ビット構造・16進表記。
- ISO/IEC 10646 Universal Coded Character Set ― Unicodeの基盤規格。コードポイントの16進表記U+XXXX。
- Unicode Consortium ― Unicode公式サイト。文字コード表・仕様書。
- POSIX.1-2017 (IEEE Std 1003.1-2017) ― UNIX/Linux標準API。ファイルパーミッションの8進表現。
よくある質問(FAQ)
2進・8進・10進・16進はどう違う?
基数(1桁で表現できる値の数)が違うだけで、同じ数を別の記数法で表現しているだけです。2進は0-1、8進は0-7、10進は0-9、16進は0-F(0-15)。CPUの内部処理は2進、人間の日常計算は10進、メモリアドレス・カラーコードは16進、UNIXパーミッションは8進が主流です。
2進と16進、なぜ相互変換が簡単?
16 = 2⁴ なので、2進の4桁がちょうど16進の1桁と対応します。例: 1010 1100₂ = AC₁₆。同様に 8 = 2³ なので2進3桁 = 8進1桁。CPUのメモリアドレスは32/64ビットで長いため、16進で表記するのが世界標準です。
10進→16進の変換方法は?
10進を16で割り、商と余りを繰り返します。余りが10-15ならA-F。例: 255 → 255/16=15余15(F) → 15/16=0余15(F) → 下から並べてFF。JavaScriptでは (255).toString(16)、Pythonでは hex(255) で一発変換。
16進のA-Fはどう読む?
A=10, B=11, C=12, D=13, E=14, F=15。大文字・小文字どちらも同じ値です。慣習的にカラーコード(#FFAA00)は大文字、URLエンコード(%2f)は小文字が主流。マシン処理では区別しませんが、可読性のため統一するのがコツです。
UNIXパーミッションが8進なのはなぜ?
ファイル権限 rwxrwxrwx(所有者/グループ/その他 各3ビット×3=9ビット)を3ビットずつ8進1桁に対応させて表記しやすいから。chmod 755は所有者7(rwx=111), グループ5(r-x=101), その他5(r-x=101)。3桁の8進で全パターンを表現できます。
HTMLカラーコード #FF0000 は何色?
赤(R)=FF=255, 緑(G)=00=0, 青(B)=00=0 の意味で、純粋な赤を表します。W3C CSSカラーモジュール準拠の標準記法。#000000は黒、#FFFFFFは白、#808080は中間灰、#FFA500はオレンジ。3桁短縮形(#F00 = #FF0000)や8桁形(#RRGGBBAA)もサポート。
IPアドレスと2進数の関係は?
IPv4は32ビットを8ビット×4オクテットに分け、各オクテットを10進で表記(192.168.1.1)。内部処理では2進や16進で扱います。IPv6は128ビットを16ビット×8に分け、16進表記(2001:db8::1)。サブネットマスクの計算は2進で行うのが本質。RFC 791/4291準拠。
C言語やPythonでの進数リテラルは?
C/C++/Java/JavaScriptでは 2進0b1010、8進0o12または012、16進0xAC。Pythonも同様。文字列変換は JS (n).toString(2)、Python bin(n)/oct(n)/hex(n)。逆変換は parseInt("1010",2)/int("1010",2)。
Unicodeのコードポイント表記 U+XXXX とは?
Unicodeでは各文字に一意の番号(コードポイント)を割り当て、U+16進4-6桁で表記します。例: U+3042「あ」(ひらがな)、U+1F600「😀」(絵文字)。ISO/IEC 10646準拠。UTF-8/UTF-16はコードポイントを実際のバイト列に符号化する方式です。
基本情報技術者試験ではどんな問題が出る?
「10進〇〇を2進で表せ」「2進の演算結果」「2の補数表現の範囲」「シフト演算」「16進FFの10進値」といった基礎理論問題が毎年10問前後出題。過去問演習が最も有効な対策です。IPA公式サイトで無料の過去問が公開されています。
負数を進数変換するには?
通常の進数変換は正の整数用。負数は「2の補数」で表現し、ビット幅を決めます。例: 8ビットで-5は、+5=00000101 → ビット反転=11111010 → +1 → 11111011。この11111011を8進や16進に変換すれば負数の進数表現になります。
小数の進数変換はどう計算する?
整数部と小数部を別々に処理。整数部は基数で除算、小数部は基数を乗算して整数部を取り出す作業を繰り返します。例: 0.375(10進) → 0.375×2=0.75(0) → 0.75×2=1.5(1) → 0.5×2=1.0(1) → 0.011(2進)。10進の0.1は2進で無限循環小数になるため、IEEE 754浮動小数点で誤差が生じます。
1KBと1KiBの違いは?
1KB=1,000バイト(SIの10進接頭辞)、1KiB=1,024バイト(IECの2進接頭辞)で、IEC 80000-13が正式に定義しています。HDD・SSDのメーカーは1,000ベース、OSやメモリは構造上1,024ベースで表示することが多く、同じ「1TB」でも表示容量に約9%の差が生じます。容量が減ったように見えるのは不良ではなく、単位の解釈の違いです。
浮動小数点(IEEE 754)は何桁の精度がある?
単精度float(32ビット)は10進で約7桁、倍精度double(64ビット)は約15〜17桁の有効桁数です。0.1のような一見単純な10進小数も2進では循環小数になるため、金額計算では10進の固定小数点型(Java の BigDecimal、Python の Decimal など)を使うのが安全です。
プログラミング言語の進数変換関数は?
JavaScriptは parseInt(str, base) と num.toString(base)、Pythonは int(str, base) と bin(n)/oct(n)/hex(n)、Javaは Integer.parseInt(str, base) と Integer.toString(n, base) が標準です。ほとんどの主要言語に2〜36進数を扱う標準関数が用意されているので、自前で除算を繰り返す実装は基本的に不要です。