進数とは、同じ数を何種類の数字で書くかという違いです
進数とは、1桁に使う数字の種類の数です。10進数は0〜9の10種類で書き、桁が1つ上がるたびに値が10倍になります。2進数は0と1の2種類で書き、桁が上がるたびに2倍になります。たとえば255は、10進数では3桁ですが、2進数では1111 1111の8桁、16進数ではFFの2桁です。値は同じで、書き方が違うだけです。
このツールには、2・8・10・16進数の欄と、自分で基数を選べる欄(2〜36進数)が並んでいます。どの欄に入力しても、ほかの欄がすぐに書き換わります。整数だけでなく、負数や小数、1,000桁の大きな数も丸めずに変換でき、2進数では割り切れない小数は、繰り返す部分をかっこで示します。下のビット表と手順の表示では、コンピュータがその数をどう保存しているか、手計算ではどう変換するかを確認できます。
進数を変換する場面
人間は10進数で数えますが、コンピュータはすべての値を0と1のビットで保存します。ビットをそのまま読むのは長すぎるため、プログラマは4ビットを16進数1桁に、3ビットを8進数1桁にまとめて書きます。次のような作業で、進数の行き来が必要になります。
- カラーコード: CSSの色
#1E90FFは、16進数2桁ずつで赤・緑・青の強さを表します。00が最も弱く、FF(10進数の255)が最も強く、1Eは30、90は144です。 - ファイルの権限: Linuxの
chmod 755では各桁が8進数で、2進数3桁が読み取り(4)・書き込み(2)・実行(1)のオンとオフに対応します。7は111なので3つともオン、5は101なので書き込みだけがオフです。 - ネットワーク: サブネットマスク255.255.255.0は4つの区切りがそれぞれ8ビットで、2進数にすると1が24個、0が8個並びます。同じマスクを /24 と短く書くのはこのためです。
- メモリとバイト: 1バイト(8ビット)は16進数2桁(00〜FF)にちょうど収まります。メモリのアドレスやハッシュ値、ファイルの中身を16進数で表示するのは、そのためです。
- 負数の読み取り: コンピュータの整数変数は、−5を「符号」と「5」に分けては保存しません。8ビットなら1111 1011のような2の補数のパターンで保存します。通信ログでFBを見かけたとき、それが−5なのか251なのかは、ビット幅と符号の扱いを合わせて判断する必要があります。
- 小数の誤差: 0.1は2進数では割り切れないため、コンピュータは最も近い値に丸めて保存します。JavaScriptで0.1 + 0.2を計算すると、0.3ではなく0.30000000000000004になるのはこのためです。
- 数学の宿題: 5進数や3進数など、10以外の基数で数を書いたり変換したりする問題は、割り算と位取りで解きます。手順の表示がその過程をそのまま示します。
使い方
- 元の数が書かれている進数の欄に入力します。16進数のFFなら16進数の欄に、2進数の1010なら2進数の欄に入れると、ほかの欄がすぐに書き換わります。
- 3進数・5進数・36進数など、ほかの基数は、5つ目の欄の左側で基数(2〜36)を選んでから入力します。
- 負数は先頭に−を付け、小数点はピリオド(.)で書きます。繰り返す小数は、0.1(6) のように繰り返す部分をかっこで囲みます。0x・0b・0oの接頭辞や、スペース・アンダースコア(_)で区切った桁も、そのまま入力できます。
- ビット表でビット幅(8・16・32・64ビット)を選ぶと、その幅での2の補数のパターンと16進数のパターンが表示されます。マスをタップすると、そのビットだけが反転した値が上の欄に入ります。
- 手順で変換先の基数を選ぶと、割り算のはしごと位取りの計算が表示されます。コピーのボタンは区切りのスペースを除いた値だけをコピーし、リンクのコピーは今の値をそのまま開けるURLを作ります。
進数ごとに使う数字
10より大きい基数では、10からアルファベットを使います。Aが10、Fが15、Zが35で、36進数まで書けます。Pythonの int() もJavaScriptの toString() も、2〜36進数を受け付けます。アルファベットの大文字と小文字は、同じ数字として読みます。
| 進数 | 使う数字 | 255 | コードの接頭辞 | よく見る場面 |
|---|---|---|---|---|
| 2進数 | 0、1 | 1111 1111 | 0b | ビット、フラグ、マスク |
| 8進数 | 0〜7 | 377 | 0o | ファイルの権限 |
| 10進数 | 0〜9 | 255 | なし | 日常の数 |
| 16進数 | 0〜9、A〜F | FF | 0x | カラーコード、メモリ、ハッシュ |
| 36進数 | 0〜9、A〜Z | 73 | なし | 短い識別番号 |
n進数から10進数へ: 位の値を掛けて足す
右端の桁から順に n⁰、n¹、n²、…を掛けて、すべて足します。16進数の1EDは 1 × 16² + 14 × 16¹ + 13 × 16⁰ = 256 + 224 + 13 = 493 です。小数点以下の桁には n⁻¹、n⁻²、…を掛けるので、2進数の0.101は 1/2 + 0/4 + 1/8 = 0.625 になります。
| 桁 | 16² | 16¹ | 16⁰ | 合計 |
|---|---|---|---|---|
| 数字 | 1 | E (14) | D (13) | |
| 位の値 | 256 | 16 | 1 | |
| 数字 × 位の値 | 256 | 224 | 13 | 493 |
10進数からn進数へ: 整数は割り、小数は掛ける
整数部は、nで割った余りを横に書きながら、商をさらにnで割っていきます。商がnより小さくなったら止め、最後の商から余りを下から上へ読みます。これが学校で習う「割り算のはしご」で、上の手順の表示も同じ形で描きます。
| 割り算 | 商 | 余り |
|---|---|---|
| 13 ÷ 2 | 6 | 1 |
| 6 ÷ 2 | 3 | 0 |
| 3 ÷ 2 | 1 | 1 |
| 上へ読む | 1101 |
小数部は逆に、nを掛けます。掛けた結果の整数部を取り出して書き、残った小数部にまたnを掛ける、という操作を小数部が0になるまで繰り返します。0.625 × 2 = 1.25 から1、0.25 × 2 = 0.5 から0、0.5 × 2 = 1 から1が取り出せるので、取り出した数字を上から下へ読んだ0.101が答えです。
2進数では割り切れない小数
小数を既約分数に直したとき、分母の素因数がすべてその基数の素因数に含まれていれば小数は途中で終わり、含まれない素因数が1つでもあれば、同じ並びが延々と繰り返されます。2進数の素因数は2だけなので、分母が2のべき乗である0.5・0.25・0.125は終わりますが、0.1 = 1/10 は分母に5があるため、0.0(0011) のように0011が果てしなく繰り返されます。10進数で1/3が0.333…と終わらないのと同じ理屈です。
| 10進数 | 分数 | 2進数 | 16進数 |
|---|---|---|---|
0.5 | 1/2 | 0.1 | 0.8 |
0.25 | 1/4 | 0.01 | 0.4 |
0.125 | 1/8 | 0.001 | 0.2 |
0.75 | 3/4 | 0.11 | 0.C |
0.1 | 1/10 | 0.0(0011) | 0.1(9) |
0.2 | 1/5 | 0.(0011) | 0.(3) |
0.3 | 3/10 | 0.0(1001) | 0.4(C) |
0.(3) | 1/3 | 0.(01) | 0.(5) |
コンピュータの小数(IEEE 754の倍精度)は、2進数の有効数字53ビットで丸めるため、0.1は正確な1/10ではなく 0.1000000000000000055511151231257827021181583404541015625 として保存されます。0.1を3回足した値が0.3とぴったり一致しないのは、このためです。このツールは値を分数のまま保持して計算するので、丸めずに、繰り返す部分まで表示できます。
2進数と8・16進数は、まとめて一気に変換できます
16は2⁴、8は2³なので、2進数を右から4桁ずつまとめると16進数の1桁に、3桁ずつまとめると8進数の1桁になります。10進数を経由する必要はありません。たとえば1 1110 1101は、先頭に0を補って0001 1110 1101とまとめると1・E・D、つまり16進数の1EDです。3桁ずつ111 101 101とまとめれば、8進数の755になります。
| 2進数 | 16進数 | 2進数 | 16進数 | 2進数 | 16進数 | 2進数 | 16進数 |
|---|---|---|---|---|---|---|---|
0000 | 0 | 0100 | 4 | 1000 | 8 | 1100 | C |
0001 | 1 | 0101 | 5 | 1001 | 9 | 1101 | D |
0010 | 2 | 0110 | 6 | 1010 | A | 1110 | E |
0011 | 3 | 0111 | 7 | 1011 | B | 1111 | F |
負数と2の補数
ここまでの欄では、負数を−5のように「符号と大きさ」で書いています。しかし、コンピュータの整数変数は符号を別に持たず、2の補数で保存します。正の数のパターンのビットをすべて反転して1を足すと、同じ大きさの負の数のパターンになります。8ビットでは、5は0000 0101で、ビットを反転すると1111 1010、これに1を足した1111 1011(16進数のFB)が−5です。最上位のビットが1なら負数として読み、同じ1111 1011を符号なしの数として読むと251になります。
| 8ビットのパターン | 16進数 | 符号なし | 2の補数 |
|---|---|---|---|
0111 1111 | 7F | 127 | 127 |
0000 0001 | 01 | 1 | 1 |
0000 0000 | 00 | 0 | 0 |
1111 1111 | FF | 255 | −1 |
1111 1011 | FB | 251 | −5 |
1000 0000 | 80 | 128 | −128 |
| 幅 | 符号なし | 2の補数 | Javaの整数型 |
|---|---|---|---|
| 8ビット | 0 〜 255 | −128 〜 127 | byte |
| 16ビット | 0 〜 65,535 | −32,768 〜 32,767 | short |
| 32ビット | 0 〜 4,294,967,295 | −2,147,483,648 〜 2,147,483,647 | int |
| 64ビット | 0 〜 18,446,744,073,709,551,615 | −9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807 | long |
値が選んだビット幅に収まらないときは、上位のビットが切り捨てられます。300を8ビットに入れると、下位8ビットの0010 1100だけが残って44になります。ビット表で幅を8に選ぶと、このように切り捨てられた姿と警告がいっしょに表示されます。
間違えやすいポイント
- 進数を取り違えて入力する: 1010を10進数の欄に入れると千十で、2進数の欄に入れて初めて10になります。数字の並びが同じでも、どの進数で読むかによって値はまったく変わります。
- 接頭辞を別の欄に入れる: 0xは16進数を表すので、10進数の欄では読み取れません。その場合、このツールは16進数の欄へ移すボタンを表示します。
- アルファベットのOと数字の0、小文字のlと数字の1: Oは24、Lは21を表す数字なので、使えるのはそれぞれ25進数以上、22進数以上だけです。16進数にはA〜Fまでしかありません。
- カンマを小数点として使う: このツールもプログラミング言語も、小数点はピリオドで書きます。カンマは、10進数の欄で 1,024 のように3桁ごとに区切るときだけ読み取ります。
- 先頭の0: 0755と755は同じ数です。ただし、C言語のコードでは0で始まる整数を8進数として読むため、10進数を書くときは先頭に0を付けません。
- 幅を決めずに2の補数を読む: FBは8ビットの2の補数では−5ですが、16ビットの00FBとして見れば251です。負数かどうかは、何ビットの値なのかを先に決めないと判断できません。
できないこと・制限
- 入力できるのは1,000桁までです。JavaScriptの通常の数は 2⁵³ − 1(9,007,199,254,740,991)を超えると精度が落ちますが、このツールはBigIntの分数で計算するため、その範囲を超えても末尾の桁まで正確です。
- 小数部は、256桁以内に終わらず繰り返しも始まらない場合、その先を…で省略して表示します。計算は分数で行うので、ほかの欄の値に誤差は積み重なりませんが、…で省略した欄を直接書き換えると、省略した桁までしか読み取りません。
- ビット表は整数だけを、128ビットまで描きます。それより大きい数は、2進数の欄で全体を確認してください。
- 浮動小数点数(IEEE 754)のビット配置、固定小数点数、負の基数、進数どうしの足し算・引き算などの演算は扱いません。
- 計算はすべてこのブラウザの中だけで行い、入力した値をサーバーに送ることはありません。
確認の基準: 進数と接頭辞の規則はPythonのドキュメントとECMAScript仕様、2の補数の範囲はJava言語仕様、権限・色・ネットワークの例はPOSIX・CSS・RFCの文書で、2026年10月22日に確認しました。表の値は、このツールの計算コアで再計算して照合しています。
出典
- 01Python: int()使える基数は2〜36、10〜35はa〜z、0b・0o・0x接頭辞と数字間のアンダースコア
- 02ECMA-262: Number.prototype.toString基数(radix)は2〜36の整数
- 03MDN: Number.prototype.toString()基数が2未満または36超だとRangeError
- 04MDN: BigInt通常の数では表せない大きな整数
- 05MDN: Number.MAX_SAFE_INTEGER正確に扱える最大の整数 2⁵³ − 1
- 06Pythonチュートリアル: 浮動小数点演算1/10は2進数で延々と繰り返され、53ビットで近似して保存
- 07Java言語仕様 4.2.1: Integral Types and Values8・16・32・64ビットの2の補数整数と範囲
- 08POSIX: chmod8進数の権限ビットの表(0400 読み取り・0200 書き込み・0100 実行)
- 09CSS Color Module Level 4: hex notation#rrggbbは2桁ずつ赤・緑・青、ffは255
- 10RFC 4632 3.1: Basic Concept and Prefix Notation/24は先頭24ビットが1、残り8ビットが0
- 11cppreference: Integer constant (C)0で始まる整数定数は8進数
よくある質問
10進数を2進数に変換するには?
2で割った余りを横に書きながら、商をさらに2で割り、商が1になったら止めます。最後の商1から余りを下から上へ読むと2進数になります。13は、6余り1、3余り0、1余り1と進み、1101です。
2進数を10進数に変換する方法は?
右端の桁から順に1、2、4、8、16と2のべき乗を掛けて足します。1010は8 + 0 + 2 + 0で10、1111 1111は128から1までをすべて足して255です。
16進数のFFは10進数でいくつですか?
255です。Fは15を表すので、15 × 16 + 15 = 255になり、2進数では1111 1111、8進数では377です。1バイトで表せる最大の値で、カラーコードでは最も明るい段階として使われます。
負数は2進数でどう書きますか?
人が書くときは−101のように先頭に−を付けますが、コンピュータは2の補数で保存します。正の数のパターンのビットをすべて反転して1を足すので、8ビットの−5は、0000 0101を反転した1111 1010に1を足した1111 1011(16進数のFB)です。ビット表で幅を選んで確認できます。
0.1を2進数にすると、なぜ終わらないのですか?
0.1は1/10で、分母の10に5が含まれますが、2進数の素因数は2だけなので、5で割り切れる形では書けないからです。そのため0.0(0011)のように0011が延々と繰り返され、コンピュータは53ビットで丸めて保存するので、0.1 + 0.2は0.3とぴったり一致しません。
2進数を16進数や8進数に素早く変換する方法はありますか?
あります。2進数を右から4桁ずつまとめると16進数の1桁、3桁ずつまとめると8進数の1桁になります。1 1110 1101は、4桁ずつ0001 1110 1101とまとめて1ED、3桁ずつ111 101 101とまとめて755です。
0x、0b、0oとは何ですか?
コードの中で数の進数を示す接頭辞です。0xは16進数、0bは2進数、0oは8進数を表し、PythonやJavaScriptがこの表記を使います。このツールは接頭辞付きで貼り付けても読み取り、表示で接頭辞をオンにすると付けたままコピーします。
何進数まで、何桁まで変換できますか?
2進数から36進数まで変換できます。10から35はAからZで書き、大文字と小文字は同じ数字として読みます。入力できるのは1,000桁までで、大きな数もBigIntの分数で計算するため、末尾の桁まで正確です。