進数変換計算機|2/8/10/16進の相互変換・ビット演算・カラーコード対応
2進・8進・10進・16進を瞬時に相互変換する無料電卓。1byte=8bit=16進2桁の基本から、IPv4/IPv6アドレス、CSSカラーコード(#RRGGBB)、メモリアドレス、ビット演算、2の補数(負数表現)、Unicodeコードポイントまで、プログラミング・組込・ネットワーク・情報処理試験の実務で必要な変換を網羅。IEEE 754浮動小数点表現やJIS X 0201/X 0208文字コード規格も参照。
2進⇔8進⇔10進⇔16進 計算機
計算式と基数の考え方
基本式
N進数の値 = Σ (桁の数字 × N^桁位置)
N進数(基数N)は、N個の記号(0〜N-1)を使って数を表現します。2進は0/1の2種類、8進は0-7、10進は0-9、16進は0-9とA-F(=10-15)を使います。桁の重みは右から順に N⁰=1、N¹=N、N²=N²、…と増えます。
例:16進 FF = 15×16¹ + 15×16⁰ = 240+15 = 255
2進 11111111 = 128+64+32+16+8+4+2+1 = 255
基数の相互関係
2進・8進・16進はすべて2の累乗の基数で、相互変換が単純です。2進3桁=8進1桁、2進4桁=16進1桁という関係を利用すれば、桁ごとに分割するだけで変換できます。10進への変換は各桁の重みを掛けて足す方法(位取り展開)、10進から変換する場合は基数で割った余りを逆順に並べる方法(除算法)を使います。
プレフィックス表記
プログラミングでは基数を明示するプレフィックスが使われます。0b(2進)、0o(8進)、0x(16進)が主流で、C/C++/Python/JavaScriptなど多くの言語で共通仕様。歴史的にはC言語で0(ゼロ)始まりが8進を意味した経緯もあり、リテラル表記のミスは重大なバグの原因になります。
基本対照表(0-255・1バイトの全範囲)
プログラミング・組込・ネットワークで頻用する0-255の対照表。1バイト(8bit)で表現できる符号なし整数の全範囲です。
| 10進 | 16進 | 2進 | 8進 | 用途例 |
|---|---|---|---|---|
| 0 | 00 | 00000000 | 000 | NULL・初期値 |
| 1 | 01 | 00000001 | 001 | SOH・真(true) |
| 7 | 07 | 00000111 | 007 | BEL(ベル) |
| 10 | 0A | 00001010 | 012 | LF(改行) |
| 13 | 0D | 00001101 | 015 | CR(復帰) |
| 15 | 0F | 00001111 | 017 | 4bit最大 |
| 16 | 10 | 00010000 | 020 | 16の1乗 |
| 32 | 20 | 00100000 | 040 | SP(スペース) |
| 48 | 30 | 00110000 | 060 | ASCII "0" |
| 65 | 41 | 01000001 | 101 | ASCII "A" |
| 97 | 61 | 01100001 | 141 | ASCII "a" |
| 127 | 7F | 01111111 | 177 | DEL・7bit最大 |
| 128 | 80 | 10000000 | 200 | 符号bit立 |
| 160 | A0 | 10100000 | 240 | NBSP(拡張) |
| 192 | C0 | 11000000 | 300 | UTF-8 2byte開始 |
| 255 | FF | 11111111 | 377 | 1byte最大 |
2の累乗・16の累乗表
メモリ容量・アドレス空間・ネットワーク設計で必ず登場する累乗値。暗記推奨。
2の累乗(bit → 値)
| 指数 | 10進 | 16進 | 備考 |
|---|---|---|---|
| 2⁷ | 128 | 0x80 | signed 8bit範囲境界 |
| 2⁸ | 256 | 0x100 | 1byteの状態数 |
| 2¹⁰ | 1,024 | 0x400 | 1 Ki(≈1K) |
| 2¹⁵ | 32,768 | 0x8000 | signed 16bit境界 |
| 2¹⁶ | 65,536 | 0x10000 | 2byte状態数・UCS-2 |
| 2²⁰ | 1,048,576 | 0x100000 | 1 Mi(≈1M) |
| 2³¹ | 2,147,483,648 | 0x80000000 | signed 32bit境界 |
| 2³² | 4,294,967,296 | 0x100000000 | IPv4アドレス空間 |
| 2⁴⁰ | 1,099,511,627,776 | — | 1 Ti(≈1T) |
| 2⁶⁴ | ≈1.84×10¹⁹ | 0x100…0(17桁) | signed/unsigned 64bit境界 |
16の累乗(16進の桁重み)
| 指数 | 10進 | bit数 |
|---|---|---|
| 16⁰ | 1 | 4bit(=1桁) |
| 16¹ | 16 | 8bit(=2桁, 1byte) |
| 16² | 256 | 12bit |
| 16³ | 4,096 | 16bit(=4桁, 2byte) |
| 16⁴ | 65,536 | 20bit |
| 16⁸ | ≈4.29×10⁹ | 32bit(=8桁, 4byte, IPv4) |
| 16³² | ≈3.4×10³⁸ | 128bit(=32桁, 16byte, IPv6/UUID) |
bit / byte / word の関係
コンピュータのデータ単位はbit(ビット, b)を基本に、8bit=1byte(B)を基準とします。16進表記は「1byteを2桁で表現できる」という利便性から、メモリダンプ・通信プロトコル・実行ファイル解析のあらゆる場面で使われます。
| 単位 | bit数 | 16進桁数 | 典型的用途 |
|---|---|---|---|
| nibble | 4 | 1 | BCD1桁・DMAコマンド |
| byte(オクテット) | 8 | 2 | ASCII・メモリ1番地 |
| word (16bit) | 16 | 4 | UCS-2・古典CPUレジスタ |
| dword (double word) | 32 | 8 | IPv4アドレス・float |
| qword (quad word) | 64 | 16 | double・現代CPUレジスタ |
| oword (octoword) | 128 | 32 | IPv6・UUID・AES鍵 |
また、「1KB=1000byte」(SI準拠) と「1KiB=1024byte」(IEC 80000-13、二進接頭辞)は本来別物です。ストレージ容量表示は10進系、メモリは2進系の慣習があり、ユーザーから見た「実容量」の差異は常に議論の的です。
2の補数と負数表現
符号付き整数は2の補数(Two's Complement)で表現するのが現代CPUの標準。8bit符号付き整数の範囲は -128〜+127、16bitは -32768〜+32767、32bitは -2,147,483,648〜+2,147,483,647 です。
| 10進 | 符号なし 8bit | 符号付き 8bit(2の補数) |
|---|---|---|
| +127 | 0x7F (01111111) | 0x7F |
| +1 | 0x01 | 0x01 |
| 0 | 0x00 | 0x00 |
| -1 | — | 0xFF (11111111) |
| -2 | — | 0xFE (11111110) |
| -128 | — | 0x80 (10000000) |
2の補数の求め方:ビット反転 + 1
-5の8bit表現は「00000101 → 反転 → 11111010 → +1 → 11111011 = 0xFB」となります。この方式なら加算器のみで減算を実現できるため、ハードウェア設計が簡潔になります。オーバーフロー時の符号反転バグ(0x80への到達で正負が反転)には注意が必要です。
実務ユースケース
CSSカラーコード (#RRGGBB)
Web/UI設計では#RRGGBB形式で16進6桁が標準。各2桁が赤・緑・青の輝度(0-255)を表し、#FFFFFF=白、#000000=黒、#FF0000=純赤。#が省略された「A0A0A0」なども頻用。CSS Color Module Level 4ではRGB関数`rgb(255 0 0)`との相互変換が必要な場面が増えています。
IPv4アドレス(オクテット表記)
IPv4は32bit=4オクテット(4byte)を10進のドット表記で表す。192.168.1.1は16進で C0.A8.01.01、2進で11000000.10101000.00000001.00000001。サブネットマスク/24 = 255.255.255.0 = 0xFFFFFF00の対応関係はネットワーク技術者必須。
IPv6アドレス
IPv6は128bit=16オクテットを16進4桁×8ブロックで表記。`2001:db8::1`のような表記で、`::`は連続する0の省略。RFC 5952で表記正規化が規定されており、大文字/小文字混在NG・先頭0省略・最長の0ブロックのみ`::`圧縮など、DNS・ファイアウォール設定でバグ源になりがち。
メモリアドレス・ポインタ解析
デバッガ・逆アセンブラはアドレスを16進表記で表示。x86_64では0x00007FFF…のような64bitアドレス、組込ARMでは0x08000000(Flash領域先頭)など、メモリマップは16進で覚えるのが実務標準。0x2000_0000_0000のようにアンダースコアで区切る流儀もあります(Rust/Python 3.6+)。
ビット演算(マスク・シフト・フラグ)
組込・ドライバ開発ではAND(&)/OR(|)/XOR(^)/NOT(~)/シフト(<<、>>)を使ってレジスタを操作。特定ビットの立上げ`x |= (1<<n)`、消去`x &= ~(1<<n)`、反転`x ^= (1<<n)`はイディオムとして必須。マスク値は16進で書くのが可読性◎。
文字コード・Unicode
UnicodeコードポイントはU+XXXXの16進表記。ASCII "A" = U+0041、ひらがな "あ" = U+3042、絵文字 "😀" = U+1F600。UTF-8では上位ビットパターン(0xC0-, 0xE0-, 0xF0-)で何byte文字かを判定。JIS X 0208(第一・第二水準)から生じるShift_JIS互換文字の16進コード確認は現場業務で頻用。
CSSカラー・IPアドレスの相互変換の実例
カラーコード変換例
| 色 | 16進 | RGB(10進) | 2進 |
|---|---|---|---|
| 白 | #FFFFFF | rgb(255,255,255) | 11111111 11111111 11111111 |
| 黒 | #000000 | rgb(0,0,0) | 00000000 00000000 00000000 |
| 赤 | #FF0000 | rgb(255,0,0) | 11111111 00000000 00000000 |
| 緑 | #00FF00 | rgb(0,255,0) | 00000000 11111111 00000000 |
| 青 | #0000FF | rgb(0,0,255) | 00000000 00000000 11111111 |
| マゼンタ | #FF00FF | rgb(255,0,255) | 11111111 00000000 11111111 |
| グレー中 | #808080 | rgb(128,128,128) | 10000000 10000000 10000000 |
| Twitter青(旧) | #1DA1F2 | rgb(29,161,242) | 00011101 10100001 11110010 |
IPアドレス変換例
| 用途 | 10進表記 | 16進 |
|---|---|---|
| プライベート (RFC 1918) | 192.168.1.1 | C0A80101 |
| ローカルホスト | 127.0.0.1 | 7F000001 |
| ブロードキャスト | 255.255.255.255 | FFFFFFFF |
| Google Public DNS | 8.8.8.8 | 08080808 |
| サブネットマスク /24 | 255.255.255.0 | FFFFFF00 |
よくある間違い・注意点
- C言語で先頭0を書いて8進解釈される — `int x = 0100;` は10進100ではなく8進100 = 10進64。zeropad目的の先頭0はバグの温床。10進定数は0で始めない、これは強い慣習です。
- 16進の大文字/小文字混在 — 「0xff」と「0xFF」は同値ですが、IPv6アドレスはRFC 5952で小文字統一が推奨。カラーコードは大文字が慣習。仕様や規約に従いましょう。
- 2進変換で先頭0を省いて桁ずれ — 10進10を「1010」で止めると4bit、8bit表現なら「00001010」と先頭0埋めが必要。ビットマスクの計算で桁ずれると全く違うレジスタを操作します。
- 2の補数の符号を忘れる — 「0xFF」は符号なしなら255、符号付きなら-1。JavaScriptの>>>と>>の違いなど、言語ごとの右シフトの挙動(算術/論理)にも注意。
- 「KB」と「KiB」の混同 — 1KB=1000byte(SI)、1KiB=1024byte(IEC 80000-13)。ストレージ容量表示、通信速度、メモリ表記で使い分けが違い、実容量が異なる問題は今も多発。
- 16進6桁カラーコードのRGB順序 — WebのCSSは#RRGGBB順ですが、AndroidのXMLは#AARRGGBBで先頭にアルファ。組込LCDドライバではBGR順もあり、赤と青が入れ替わる。
- 32bit整数のオーバーフロー — 0x7FFFFFFF + 1 は符号付き32bitで負数(-2147483648)にラップ。unsigned int でも0xFFFFFFFF + 1 = 0。金額・時刻・IDが吹き飛ぶ古典的バグ。
関連する規格・仕様
- IEC 60559 / IEEE 754 ― 浮動小数点数の2進表現規格。32bit(単精度)・64bit(倍精度)の符号bit・指数部・仮数部の割当てを定義。デバッガのfloat表示は本規格に基づく。
- IEC 80000-13 ― 情報量の単位を定めた国際規格。バイト(B)・ビット(bit)、二進接頭辞(Ki・Mi・Gi・Ti)、SI接頭辞(K・M・G・T)の使い分けを規定。
- ISO/IEC 646 / JIS X 0201 ― 7bit ASCII・8bit半角カナを含む文字符号規格。0x20-0x7E がASCII可読部、0xA1-0xDFが半角カナ。
- JIS X 0208 / JIS X 0213 ― 日本語文字符号規格。区点コードと16進表現の対応。Shift_JIS・EUC-JP・UTF-8の変換ロジックの基礎。
- Unicode Standard (ISO/IEC 10646) ― U+0000〜U+10FFFFを定義。UTF-8/UTF-16/UTF-32のエンコーディング仕様を規定。
- RFC 791 (IPv4) / RFC 8200 (IPv6) ― インターネットプロトコルアドレス表現。IPv4は32bit・IPv6は128bit。
- RFC 5952 ― IPv6アドレスのテキスト表現ルール。小文字統一・0省略・::圧縮ルール。
- CSS Color Module Level 4 ― W3C勧告。#RGB/#RRGGBB/#RRGGBBAA表記とrgb()/rgba()/hsl()関数の変換仕様。
参考文献・公的資料
実務で仕様を確認する際は、以下の一次資料を参照してください。
- IPA 情報処理推進機構 情報処理技術者試験 ― 基本情報・応用情報の試験範囲に進数変換・ビット演算・浮動小数点が必ず含まれる。公式シラバスと過去問が学習の一次資料。
- 日本産業標準調査会(JISC) ― JIS規格の公式索引。JIS X 0201・JIS X 0208・JIS X 0213(文字符号規格)を検索できる。
- ISO/IEC 80000-13 情報量の単位 ― バイト・ビット・二進接頭辞の国際規格。KB/KiBの正しい使い分けの根拠。
- RFC 5952 A Recommendation for IPv6 Address Text Representation ― IPv6アドレスの正規化表記の一次仕様。
- The Unicode Consortium ― Unicode最新版の公式仕様書。コードポイントの全リストと文字プロパティ。
- W3C CSS Color Module Level 4 ― CSSカラー表記の公式勧告。#RRGGBB・rgb()・hsl()の変換ルール。
- IEEE Std 754-2019 Floating-Point Arithmetic ― 浮動小数点演算の標準規格。32bit/64bit表現の一次仕様。
- 情報通信研究機構(NICT) ― 情報通信技術の公的研究機関。IPv6・DNS等の技術資料を公開。
よくある質問(FAQ)
なぜ16進数を使うの?
2進4桁を1桁に圧縮できるため、メモリダンプや通信ログの可読性が飛躍的に上がります。1byte=8bit=16進2桁の関係が単純で、人間が桁を読み間違えにくいのも利点。10進はハードウェアと対応が悪く、8進は昔のPDPやUnixパーミッション以外ではほとんど使われません。
1バイトは何bit?何桁の16進?
1バイト(byte, オクテット)は8bit、16進では2桁で表現できます。値の範囲は符号なしで0〜255(0x00〜0xFF)、符号付き(2の補数)で-128〜+127。通信プロトコルでは「オクテット」という呼称も使われます。
1024と1000、どっちがKB?
厳密には1KB=1000byte(SI準拠)、1KiB=1024byte(IEC 80000-13、二進接頭辞キビ)です。しかし歴史的にメモリ業界では「KB=1024」の慣習が残り、Windowsはメモリ・ストレージともに1024基準、macOS/Linuxは1000基準で表示するなど混乱があります。
2の補数って何?
符号付き整数を表現する方式で、ビット反転して1を足すと負数になります。例:8bitの-1は「00000001 → 反転 → 11111110 → +1 → 11111111 = 0xFF」。加算器だけで減算が実現でき、ハードウェア設計が単純化されるため、現代の全てのCPUで採用されています。
CSSカラー#FFEEDDって何色?
RGB(255,238,221)、ペール系の温かみあるベージュです。R=FF(255)最大、G=EE(238)高い、B=DD(221)やや低い。R>G>Bなのでオレンジ〜ベージュ系。#RRGGBB形式は各2桁で0-255の輝度を表し、白は#FFFFFF、黒は#000000、赤は#FF0000。
IPアドレスを16進にする意味は?
ルータ・ファイアウォールのACL設定やパケットヘッダ解析で16進表記が使われます。192.168.1.1 = 0xC0A80101。IPv6は仕様上16進表記が必須で、`2001:db8::1`のように書きます。またサブネットマスクとネットワークアドレスのAND演算は2進/16進で考えるのが早い。
0x7F+1はいくつになる?
符号なし8bitなら0x80(=128)、符号付き8bit(2の補数)ならオーバーフローで-128。127→-128という符号反転が起きるので、金額・タイマー値・IDなど数値の整合性が重要な箇所ではオーバーフロー検出が必須です。
浮動小数点の16進ダンプの読み方は?
IEEE 754単精度(32bit)は符号1bit・指数8bit・仮数23bitの順で並びます。0x3F800000 = 1.0、0x40000000 = 2.0、0xBF800000 = -1.0。デバッガでfloat変数をメモリダンプすると本表現で見え、NaN・Inf・非正規化数のパターン識別が可能です。
ビットマスクとは?何のために使う?
特定のビット位置を取り出す・立てる・落とすために使う定数値。例:0x0F は下位4bit抽出、0xF0 は上位4bit抽出。組込レジスタは1つの32bit変数に複数の設定ビットが詰め込まれていることが多く、マスクとシフトで安全に読み書きします。
Unicodeコードポイントの調べ方は?
Windowsは「文字コード表(charmap.exe)」、macOSは「絵文字と記号ビューア」、オンラインではunicode.orgで全文字が検索可能。「あ」=U+3042、「A」=U+0041、絵文字「😀」=U+1F600。プログラムで書くならJSは`'\u{3042}'`、Pythonは`'あ'`。
負の数を16進で表すには?
2の補数表現でビット反転+1。例:8bitの-3は「3=0x03 → 0xFC + 1 = 0xFD」。ビット幅を明示しないと意味が定まらないため、「int32で-3」なら0xFFFFFFFD、「int8で-3」なら0xFD。デバッガの表示は言語・型で解釈が変わります。
16進10桁の数字は最大でどれくらい?
16¹⁰ - 1 = 1,099,511,627,775 (0xFFFFFFFFFF)。約1.1兆、40bit分です。MACアドレス(6byte=12桁, 0xFFFFFFFFFFFF)より少し小さい範囲。40bitはメモリバス幅として1TB空間相当。