進法変換ツール

どれか1か所に入力すると、2進数・8進数・10進数・16進数が同時に変換されます。大きな整数や負の数も正確に扱い、2〜36進法の任意変換は計算の過程まで表示します。

0b・0o・0xの接頭辞、空白、アンダースコア(_)は自動的に無視します。先頭に - を付けると負の数になります。整数のみ対応です。

任意進法変換(2〜36進法)と計算過程

進法とは? 位取りの読み方

進法とは、1つの桁がいくつの値を取れるか(基数)によって、桁が1つ上がるごとに値が何倍になるかを決める約束です。 10進数の「253」は 2×102 + 5×101 + 3×100 です。2進数の「1101」も同じ読み方で、 1×23 + 1×22 + 0×21 + 1×20 = 8 + 4 + 0 + 1 = 13 になります。どの進法でも「各桁の数字 × 基数の桁数乗」を足せば 10進数の値が得られます。下の計算過程に出てくる「位取りの展開」がこの計算です。

逆に10進数をN進数に直すには、Nで割り続けて、余りを最後から順に読みます。13を2で割ると商6余り1、6÷2は商3余り0、3÷2は商1余り1、 1÷2は商0余り1なので、余りを逆順に並べて1101になります。逆順になるのは、最初に求まる余りがいちばん下の桁(1の位)だからです。

0〜16の対応表

10進数2進数8進数16進数
00000000
10000111
20001022
30001133
40010044
50010155
60011066
70011177
801000108
901001119
100101012A
110101113B
120110014C
130110115D
140111016E
150111117F
16100002010

16進数の1桁は2進数の4ビットにぴったり対応し、8進数の1桁は3ビットに対応します。そのため2進数から16進数への変換は、計算なしで4桁ずつに区切って表から探すだけです。 たとえば 1011 0101 は B と 5 なので B5 です。逆に16進数の各桁を4ビットに展開すれば2進数になります。

なぜコンピュータは2進数を使うのか

電子回路は、電圧が高いか低いかのように、はっきり区別できる2つの状態を扱うのが最も安定しているため、0と1の2進数が基本になっています。 ただし2進数は桁が長く、人が読むのには向きません。そこでメモリアドレス、エラーコード、色コードには4ビットを1文字にまとめられる16進数を、 Unixのファイル権限には3ビットを1文字にまとめられる8進数を使います。1,000は2進数で1111101000(10桁)、8進数で1750、16進数で3E8と、だんだん短くなります。

2のべき乗の表

ビルド時にBigIntで計算した値なので、253を超えても正確です。

指数10進数16進数
2^011
2^122
2^244
2^388
2^41610
2^53220
2^66440
2^712880
2^8256100
2^101,024400
2^124,0961000
2^1665,53610000
2^201,048,576100000
2^2416,777,2161000000
2^312,147,483,64880000000
2^324,294,967,296100000000
2^539,007,199,254,740,99220000000000000
2^639,223,372,036,854,775,8088000000000000000
2^6418,446,744,073,709,551,61610000000000000000

28 = 256 は1バイトで表せる値の個数(0〜255)、216 = 65,536 はポート番号の個数(0〜65535)です。JavaScriptの通常の数値は64ビット浮動小数点数で、 整数を正確に表せるのは 253 − 1 = 9,007,199,254,740,991 までです。それを超えると表せない整数が出てくるため、この変換ツールはBigIntで計算します。

精度・負の数・小数の扱い

負の数と2の補数

コンピュータは負の整数を多くの場合2の補数で保存します。nビットで -x は 2n − x として表します。8ビットでは -1 が 256 − 1 = 255 = 11111111(16進数 FF)、 -128 が 10000000(80)、+127 が 01111111(7F)です。同じビット列 FF が、符号なしとして読めば255、符号つきとして読めば -1 になるように、ビット列はビット幅と符号の有無を決めないと意味が定まりません。 上のツールに負の数を入れると8・16・32・64ビットの表現が並び、その範囲に収まらないビット幅の行は表示されません。

ビット幅符号つきの最小符号つきの最大符号なしの最大
8ビット-128127255
16ビット-32,76832,76765,535
32ビット-2,147,483,6482,147,483,6474,294,967,295
64ビット-9,223,372,036,854,775,8089,223,372,036,854,775,80718,446,744,073,709,551,615

実務での使いどころ: 色コードとchmod

Webの色 #FF8800 は、赤・緑・青の各バイト FF、88、00 を並べたもので、10進数では赤255、緑136、青0です(0x88 = 8×16 + 8 = 136)。 ファイル権限の 755 は8進数として読み、各桁は読み取り r=4、書き込み w=2、実行 x=1 の合計です。

8進数2進数権限
0000---
1001--x
2010-w-
3011-wx
4100r--
5101r-x
6110rw-
7111rwx

たとえば chmod 755 は、所有者が7(rwx)、グループが5(r-x)、その他が5(r-x)で rwxr-xr-x となり、2進数では 111 101 101 です。 chmod 644 は rw-r--r-- で、書き込めるのは所有者だけ、全員が読み取れます。

検算した計算例

  1. 2進数 → 10進数: 10110101 は 128 + 32 + 16 + 4 + 1 = 181 で、16進数では B5 です(1011 = B、0101 = 5)。
  2. 16進数 → 10進数: 16進数の 1F4 は 1×256 + 15×16 + 4 = 500 です。
  3. 8進数 → 2進数: 8進数の 755 は 111 101 101 です。各桁を3ビットに展開します。
  4. 36進数: 36進数の ZZ は 35×36 + 35 = 1,295 です。逆に3,000を36で割ると商83余り12(C)、83を36で割ると商2余り11(B)なので、3,000は36進数で 2BC です。
  5. 大きな数: 9,007,199,254,740,993 は16進数で 20000000000001 です。JavaScriptの通常の数値で扱うと 9,007,199,254,740,992(16進数で 20000000000000)に丸められてしまいますが、このツールはBigIntで末尾の桁まで正確に変換します。
  6. 2の補数: -100 の8ビット表現は 256 − 100 = 156 = 9C。-1 の32ビット表現は FFFFFFFF です。200 は符号つき8ビット(-128〜127)に入らないため8ビットの行は表示されず、16ビットの行に 00C8 が出ます。

よくある間違いと限界

結果の活用方法

よくある質問

負の数や小数も変換できますか?

負の整数は先頭に - を付ければ変換でき、8・16・32・64ビットの2の補数表現も表示されます。小数点には対応しておらず、整数のみ扱います。

なぜ36進法まで対応しているのですか?

36進法は0〜9とA〜Z(10〜35)をすべて使う、数字と英字だけで書ける最大の進法です。URL短縮や短い識別子の生成などで使われるため、対応しています。

とても大きな数も正確に変換されますか?

はい。JavaScriptの通常の数値は約9×1015(253)を超えると整数が不正確になりますが、このツールはBigIntで計算するため、桁数の上限は設けていません。ただし数千桁を超える入力ではブラウザが遅くなることがあります。

0xや0bが付いた値をそのまま貼り付けてもよいですか?

対応する欄ならそのまま入力できます。0x(16進数)、0b(2進数)、0o(8進数)は自動的に取り除かれ、空白とアンダースコアも無視されるので、1111_0000 のような書き方も使えます。

16進数の1桁がなぜ4ビットなのですか?

16 = 24 だからです。16進数の1桁は0〜15で、4ビットが取れる16通りの値と一対一に対応します。同じ理由で、8進数の1桁は3ビット、32進数の1桁は5ビットに対応します。

2の補数の表に出ないビット幅があるのはなぜですか?

その値を収められるビット幅だけを表示するためです。たとえば200は符号つき8ビットの範囲(-128〜127)に入らないので、表は16ビットから始まります。

あわせて使いたいツール

このツールは学習と開発の参考用です。暗号やセキュリティに関わる値は、実績のあるライブラリと公式の仕様で必ず確認してください。