閉じる

完全保存版 2進数・10進数・16進数の変換表と計算のコツ

2進数(バイナリ)、10進数(デシマル)、16進数(ヘキサ)の相互変換は、プログラミングにおける数値処理の大前提です。

本記事では、基礎概念と表記ルールから、手計算の手順、主要言語での変換関数、0〜255の変換表、暗算のコツや検算方法までを丁寧にまとめました。

実務で迷わないための実用的な視点で解説します。

2進数・10進数・16進数の基礎

基数と桁の重み

数値は位置(桁)と基数(ベース)によって表されます。

右端の桁から順に、それぞれの基数の累乗を重みとして掛け合わせ、総和を取ったものがその数の値になります。

  • 10進数は基数10で、各桁の重みは…1000(10の3乗)、100(10の2乗)、10、1です。
  • 2進数は基数2で、各桁の重みは…128(2の7乗)、64、32、16、8、4、2、1です。
  • 16進数は基数16で、各桁の重みは…4096(16の3乗)、256、16、1です。

例として、2進数の1101(2)は、8+4+0+1=13(10)です。

16進数の「A」は10、「F」は15を表します。

たとえば0x1A3(16)は、1×256+10×16+3=419(10)です。

表記ルールと接頭辞 0b 0x

プログラミングでは、数値リテラルの基数を明示するための接頭辞がよく使われます。

  • 2進数には接頭辞0bを付けます(例: 0b1010)。
  • 16進数には接頭辞0xを付けます(例: 0xFF)。
  • 10進数は接頭辞なしが一般的です。

16進の桁は0〜9とA〜Fを用います(A〜Fはa〜fでも可)。

桁の区切りやゼロ埋めは可読性と用途に合わせます。

たとえばバイト(8ビット)を意識して2進数を8桁にゼロ埋めすることがあります(例: 00001010)。

また、言語によっては数値リテラルにアンダースコアで桁区切りを入れられます(例: 0b1111_0000、1_000_000)。

注意点として、歴史的に一部の言語や処理系では先頭0が付く数値を8進数と解釈する仕様がありました。

現在は明示的な接頭辞(0b、0x、0o)や関数の基数引数を正しく指定することで誤解釈を避けられます。

参考までに主要言語の表記をまとめます。

言語2進リテラル16進リテラル備考
Python0b10100xFF整数→文字列の変換やゼロ埋めが充実
JavaScript0b10100xFFparseIntは必ず基数を指定するのが安全
Java0b10100xFFJava 7以降で0bが利用可能
C++0b10100xFFC++14以降で0bが標準化
C(処理系依存の0b)0xFF標準Cでは0bは未対応のものが多い

プログラミングでの変換関数

言語ごとの代表的な変換方法を示します。

Python

Python
n = 42
# 10進→2進/16進 (文字列)
bin_str = format(n, 'b')       # '101010'
bin8    = format(n, '08b')     # '00101010' (8ビットゼロ埋め)
hex_str = format(n, 'x')       # '2a'
hex2    = format(n, '02X')     # '2A' (大文字2桁)

# 文字列→10進 (指定基数)
d1 = int('1010', 2)            # 10
d2 = int('FF', 16)             # 255

JavaScript

JavaScript
const n = 42;
// 10進→2進/16進
const bin = n.toString(2);                 // '101010'
const bin8 = bin.padStart(8, '0');         // '00101010'
const hex = n.toString(16).toUpperCase();  // '2A'

// 文字列→10進 (基数は必ず明示)
const d1 = parseInt('1010', 2);  // 10
const d2 = parseInt('FF', 16);   // 255

// リテラル
const a = 0b1010;  // 10
const b = 0xFF;    // 255

C/C++

C++
// C++14以降
#include <bitset>
#include <iostream>
#include <string>
int n = 42;

// 10進→2進(8ビット文字列)
std::string bin8 = std::bitset<8>(n).to_string(); // "00101010"

// 10進→16進 表示
std::cout << std::hex << std::uppercase << n;     // "2A"

// 文字列→10進
int d1 = std::stoi("1010", nullptr, 2);           // 10
int d2 = std::stoi("FF",   nullptr, 16);          // 255

// C言語の例 (16進表示)
#include <stdio.h>
int m = 255;
printf("%02X\n", m); // "FF"
// C言語には2進表示の書式はありません(自作またはビット演算で対応)

Java

Java
int n = 42;
// 10進→2進/16進
String bin = Integer.toBinaryString(n);          // "101010"
String bin8 = String.format("%8s", bin).replace(' ', '0'); // "00101010"
String hex = Integer.toHexString(n).toUpperCase();         // "2A"

// 文字列→10進
int d1 = Integer.parseInt("1010", 2); // 10
int d2 = Integer.parseInt("FF", 16);  // 255

進数変換の基本

10進から2進への変換

もっとも基本的な手順は「2で割って余りを取る」を繰り返し、余りを下から上へ並べる方法です。

例として45(10)を2進数にします。

余り
45 ÷ 2 = 221
22 ÷ 2 = 110
11 ÷ 2 = 51
5 ÷ 2 = 21
2 ÷ 2 = 10
1 ÷ 2 = 01

余りを下から並べると「101101」なので、45(10) = 101101(2)です。

別法として「2のべき乗の引き算」を使うと暗算が速くなります。

45に最も近い2のべき乗は32(2の5乗)なので、45-32=13、次は8、4、1…と選んでいくと、32+8+4+1で101101(2)と分かります。

10進から16進への変換

「16で割って余りを取る」を繰り返す方法が基本です。

例として201(10)を16進にします。

  • 201 ÷ 16 = 12 余り 9 → 下位桁は9
  • 12 ÷ 16 = 0 余り 12 → 上位桁はC(12)

よって201(10) = 0xC9(16)です。

先に2進へ変換し、4ビットずつ区切って16進に読み替える方法もよく使います。

2進から10進への変換

各桁に対応する重み(2のべき乗)を足し合わせます。

101101(2)は、32+8+4+1=45(10)です。

桁を左から右へ読むときは、累積値を2倍して次のビット(0/1)を加える方法も有効です。

16進から10進への変換

各桁の重みは16のべき乗です。

0x1A3は、1×256+10×16+3=419(10)です。

桁を左から右へ読むときは、累積値を16倍して次の桁値を加える手順にすると、桁数が多くても手早く計算できます。

2進と16進の相互変換

2進と16進の間は4ビット(ニブル)単位で厳密に対応します。

次の対応を覚えると高速です。

16進2進(4ビット)16進2進(4ビット)
0000081000
1000191001
20010A1010
30011B1011
40100C1100
50101D1101
60110E1110
70111F1111

例: 1101 0110 1111(2) → D 6 F → 0xD6F。

左端の桁数が4の倍数に満たないときは左側を0で埋めてから対応させます(例: 11(2) → 0011 → 0x3)。

2進数・10進数・16進数の変換表

0〜15の変換表

基本の対応を4ビット単位で確認します。

10進16進2進(4ビット)
00x00000
10x10001
20x20010
30x30011
40x40100
50x50101
60x60110
70x70111
80x81000
90x91001
100xA1010
110xB1011
120xC1100
130xD1101
140xE1110
150xF1111

0〜255の変換表

バイト(8ビット)の範囲で、10進・16進・2進の対応を示します。

2進は8ビットでゼロ埋めしています。

10進16進2進
8ビット
10進16進2進
8ビット
10進16進2進
8ビット
00x0000000000850x55010101011700xAA10101010
10x0100000001860x56010101101710xAB10101011
20x0200000010870x57010101111720xAC10101100
30x0300000011880x58010110001730xAD10101101
40x0400000100890x59010110011740xAE10101110
50x0500000101900x5A010110101750xAF10101111
60x0600000110910x5B010110111760xB010110000
70x0700000111920x5C010111001770xB110110001
80x0800001000930x5D010111011780xB210110010
90x0900001001940x5E010111101790xB310110011
100x0A00001010950x5F010111111800xB410110100
110x0B00001011960x60011000001810xB510110101
120x0C00001100970x61011000011820xB610110110
130x0D00001101980x62011000101830xB710110111
140x0E00001110990x63011000111840xB810111000
150x0F000011111000x64011001001850xB910111001
160x10000100001010x65011001011860xBA10111010
170x11000100011020x66011001101870xBB10111011
180x12000100101030x67011001111880xBC10111100
190x13000100111040x68011010001890xBD10111101
200x14000101001050x69011010011900xBE10111110
210x15000101011060x6A011010101910xBF10111111
220x16000101101070x6B011010111920xC011000000
230x17000101111080x6C011011001930xC111000001
240x18000110001090x6D011011011940xC211000010
250x19000110011100x6E011011101950xC311000011
260x1A000110101110x6F011011111960xC411000100
270x1B000110111120x70011100001970xC511000101
280x1C000111001130x71011100011980xC611000110
290x1D000111011140x72011100101990xC711000111
300x1E000111101150x73011100112000xC811001000
310x1F000111111160x74011101002010xC911001001
320x20001000001170x75011101012020xCA11001010
330x21001000011180x76011101102030xCB11001011
340x22001000101190x77011101112040xCC11001100
350x23001000111200x78011110002050xCD11001101
360x24001001001210x79011110012060xCE11001110
370x25001001011220x7A011110102070xCF11001111
380x26001001101230x7B011110112080xD011010000
390x27001001111240x7C011111002090xD111010001
400x28001010001250x7D011111012100xD211010010
410x29001010011260x7E011111102110xD311010011
420x2A001010101270x7F011111112120xD411010100
430x2B001010111280x80100000002130xD511010101
440x2C001011001290x81100000012140xD611010110
450x2D001011011300x82100000102150xD711010111
460x2E001011101310x83100000112160xD811011000
470x2F001011111320x84100001002170xD911011001
480x30001100001330x85100001012180xDA11011010
490x31001100011340x86100001102190xDB11011011
500x32001100101350x87100001112200xDC11011100
510x33001100111360x88100010002210xDD11011101
520x34001101001370x89100010012220xDE11011110
530x35001101011380x8A100010102230xDF11011111
540x36001101101390x8B100010112240xE011100000
550x37001101111400x8C100011002250xE111100001
560x38001110001410x8D100011012260xE211100010
570x39001110011420x8E100011102270xE311100011
580x3A001110101430x8F100011112280xE411100100
590x3B001110111440x90100100002290xE511100101
600x3C001111001450x91100100012300xE611100110
610x3D001111011460x92100100102310xE711100111
620x3E001111101470x93100100112320xE811101000
630x3F001111111480x94100101002330xE911101001
640x40010000001490x95100101012340xEA11101010
650x41010000011500x96100101102350xEB11101011
660x42010000101510x97100101112360xEC11101100
670x43010000111520x98100110002370xED11101101
680x44010001001530x99100110012380xEE11101110
690x45010001011540x9A100110102390xEF11101111
700x46010001101550x9B100110112400xF011110000
710x47010001111560x9C100111002410xF111110001
720x48010010001570x9D100111012420xF211110010
730x49010010011580x9E100111102430xF311110011
740x4A010010101590x9F100111112440xF411110100
750x4B010010111600xA0101000002450xF511110101
760x4C010011001610xA1101000012460xF611110110
770x4D010011011620xA2101000102470xF711110111
780x4E010011101630xA3101000112480xF811111000
790x4F010011111640xA4101001002490xF911111001
800x50010100001650xA5101001012500xFA11111010
810x51010100011660xA6101001102510xFB11111011
820x52010100101670xA7101001112520xFC11111100
830x53010100111680xA8101010002530xFD11111101
840x54010101001690xA9101010012540xFE11111110
850x55010101011700xAA101010102550xFF11111111

2のべき乗の早見表

暗算や検算でよく使う2のべき乗をまとめました。

n2のべき乗(2^n)備考
01
12
24
38
416
532
664
71281バイトの最上位ビット
82561バイトの桁あふれ境界
9512
101024約1KB
112048
1240964KB(ページサイズの目安)
138192
1416384
1532768
1665536約64KB
201048576約1MB
2416777216約16MB
301073741824約1GB
32429496729632ビット無符号の最大+1

必要に応じて、16のべき乗(=2の4の倍数)も覚えると16進との行き来が快適です。

たとえば16^2=256、16^3=4096、16^4=65536です。

計算のコツと検算

4ビット単位で考える

2進と16進は4ビット(ニブル)で1桁対応します。

バイト(8ビット)は上位ニブルと下位ニブルの組で、16進2桁に対応します。

たとえば0xAFは、上位ニブルA(1010)と下位ニブルF(1111)で、2進では1010 1111となります。

桁数が多いときこそ「4ビットずつに切る」ことで、見間違いや位取りのミスを減らせます。

2のべき乗を素早く使う

2進→10進では、128 64 32 16 8 4 2 1のどれが立っているかを見て合計します。

10進→2進では、対象の数から最大の2のべき乗を順に引いていくと素早く求められます。

16進→2進は各桁を4ビットに展開するだけなので、A(1010)、C(1100)、F(1111)などよく出るパターンを体で覚えると正確さが上がります。

よくあるミスと対策

  • 基数の指定忘れで誤変換になることがよくあります。parseIntやstoiなどでは必ず基数(2や16)を明示します。
  • 左端のゼロの扱いに注意します。特に2進を8ビットや16ビットで扱う場合はゼロ埋めを徹底します(例: 1010 → 00001010)。
  • 16進の大文字小文字は値に影響しませんが、出力の仕様(大文字/小文字)は揃えます(例: “%02X”やtoUpperCase)。
  • C言語では2進の入出力が標準書式で用意されていません。自作関数やビット演算、またはデバッガ/ライブラリの補助を使います。
  • 10進→2進の手計算で余りの並べ順を逆にするミスが起きがちです。余りは下から上へ並べる点を意識します。

検算は「元の基数へ戻す」ことが最も確実です。

たとえば10進→2進にしたら、2進→10進で合計して元の数に戻るかを確認します。

プログラムでは二重変換や、独立した別実装(例: 別言語や標準関数)でクロスチェックすると安心です。

まとめ

2進数・10進数・16進数の相互変換は、アルゴリズム理解から入出力の実装、デバッグや性能チューニングに至るまで幅広く役立ちます。

基数と桁の重み、接頭辞(0b/0x)などの表記ルール、手計算の基本手順を押さえ、主要言語の変換関数を正しく使えるようになれば、日々の開発での迷いが減ります。

0〜255の変換表や2のべき乗の早見表は、暗算や検算の強い味方です。

まずは4ビット単位の読み替えと2のべき乗の感覚を身につけ、確実な変換と素早い検算ができる力を養っていきましょう。

プログラミング - データ表現と数値
この記事を書いた人
エーテリア編集部
エーテリア編集部

このサイトでは、プログラミングをこれから学びたい初心者の方に向けて記事を書いています。 基本的な用語や環境構築の手順から、実際に手を動かして学べるサンプルコードまで、わかりやすく整理することを心がけています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!