進数変換ツール

バイナリ、8進数、10進数、16進数の間で変換します。

あなたのデータはデバイスを離れません
バイナリ(基数2)
8進数(基数8)
10進数(基数10)
16進数(基数16)

数値基数を理解する

数値基数(またはradix)は、数を表すために使用される一意の桁の数を決定します。最も馴染みがあるのは10進数(decimal)で、0〜9の桁を使用します。コンピューターは、0と1のみのバイナリ(基数2)をネイティブに使用します。

よくある質問

非常に大きな数値をサポートしていますか?

はい。このツールはJavaScriptのBigIntを使用しており、精度を失うことなく任意の大きな整数をサポートします。数百桁の数値を変換できます。

なぜバイナリがコンピューティングで重要なのですか?

コンピューターは、バイナリ(1/0)に自然にマップされる2つの状態(オン/オフ)を持つ電気信号を使用します。テキスト、画像、ビデオなど、あらゆるデータは最終的にバイナリで保存および処理されます。

位置記数法の仕組み

位置記数法は、固定サイズの数字記号セットを使って数を表す。各桁の位置がその重みを決める。位置i(右から数えてゼロから始まる)の重みは base^i だ。数の値は全位置の digit × base^i の和だ。10進数での文字列 3523×100 + 5×10 + 2×1 = 352 を意味する。2進数での文字列 1011 は10進数で 1×8 + 0×4 + 1×2 + 1×1 = 11 を意味する。

位置記数法は数の表現における2大発明のひとつだ。もう一方は非位置記数法(ローマ数字、エジプト神官文字)で、記号が位置に関わらず固定の値を持つ。位置記数法は圧縮できるが、非位置記数法はできない。1,888は10進数では4桁だが、ローマ数字では8文字:MDCCCLXXXVIIIとなる。

基数の小史

バビロニア人は少なくとも古バビロニア時代(紀元前1900〜1600年頃)から位置記数法の60進法(六十進法)を使っていた。その時代の楔形文字の粘土板にはすでに位置記数法が使われている。なぜ60か?小さな約数が非常に多い(1、2、3、4、5、6、10、12、15、20、30、60)ため、小数を表現できなかった時代に分数の計算が容易だった。バビロニアの遺産は今も身近に残っている:時間(1分60秒、1時間60分)と角度・地理座標(円周360度、1度60分、1分60秒)はその直接の子孫だ。時計を読んだり緯度を確認したりするとき、あなたは六十進法を読んでいる。

現在知られる10進位置記数法はインドの数学者によって西暦初期の数世紀に開発された。それ以前の計算板と区別する概念的飛躍は位取りとしてのゼロの書き記された記号だ。位置記数法の文脈でゼロが使われた最古の明確な例は一般にブラーマグプタ(628年)に帰せられる。その著書Brāhmasphuṭasiddhāntaはゼロを用いた算術の規則を示した。バクシャリー写本はそれよりもさらに早い、位取り記号としての点(bindu)の使用を示している。

10進法は8〜9世紀にインドからイスラム世界へ伝わった。ペルシャの万能学者al-Khwārizmīは825年頃にインド数字による計算についてを著した(「アルゴリズム」と「代数」は彼の名前と著書名の語源の直接の子孫だ)。ヨーロッパは遅れた。ピサのレオナルド(フィボナッチとして知られる)Liber Abaci(1202年)でラテンヨーロッパにヒンドゥー・アラビア数字を正式に紹介し、ローマ数字より優れていることを実証した。ローマ数字は16世紀までヨーロッパの帳簿付けに残存した。

ゴットフリート・ヴィルヘルム・ライプニッツは1703年の論文Explication de l'arithmétique binaireで完全な2進数システムを記述した。もっとも主な動機は実用的というよりも哲学的なものだった(易経との対応)。2進数コンピューティングへの飛躍はクロード・シャノンの1937年のMIT修士論文「リレー回路と開閉回路の記号解析」によってもたらされた。ブール代数が電気リレーネットワークをモデル化できることを示し、2進法をデジタル論理の自然言語とした。

変換アルゴリズム

10進数から他の基数へ:繰り返し除算。10進整数Nを基数bに変換するには、Nをbで割り、余りを記録し、Nを商に置き換えて商が0になるまで繰り返す。余りを下から上に読むと基数bの桁が得られる。156を2進数に変換する例:156÷2 = 78 r0、78÷2 = 39 r0、39÷2 = 19 r1、19÷2 = 9 r1、9÷2 = 4 r1、4÷2 = 2 r0、2÷2 = 1 r0、1÷2 = 0 r1。余りを下から読むと 10011100。検証:128 + 16 + 8 + 4 = 156。

他の基数から10進数へ:ホーナー法。0から始めて、左から右へ各桁ごとに、実行合計に基数を掛けて新しい桁を加える。16進数 1F4 の例:0×16 + 1 = 1、次に1×16 + 15 = 31、次に31×16 + 4 = 500。

どちらのアルゴリズムも桁数に対して線形時間で実行される。JavaScriptの BigInt はこれを内部実装しており、このツールに精度上限がない理由だ。200桁の数も丸め誤差なく任意の2つの基数間で変換できる。

コンピューティングで重要な4つの基数

覚えておく価値のある2のべき乗

べき乗10進数16進数重要な理由
2⁸2560x1001バイト;8ビットチャンネルの最大値(RGB)
2¹⁰1,0240x400コンピューティングでの「1K」
2¹⁶65,5360x10000UTF-16 BMPサイズ;16ビット整数の最大値
2²⁰1,048,5760x100000コンピューティングでの「1M」
2²⁴16,777,2160x100000024ビットRGB(「1670万色」)
2³²約43億0x10000000032ビット符号なし整数の最大値;IPv4アドレス空間
2⁶⁴~1.8×10¹⁹0x100…64ビット整数の最大値;浮動小数点の精度をはるかに超える

基数変換を使う場面

知っておく価値のあるその他の基数

ソースコードのプレフィックス規約

最新の言語のほとんどは、ソースコードで基数を明確にするために同じリテラルプレフィックスセットを使用する:

よくある質問

負の数はどう扱いますか?

コンピューターは2の補数を使って負の整数を表現する:すべてのビットを反転して1を加える。8ビットの2の補数では、−1は 11111111(0xFF)、−5は 11111011(0xFB)、−128は 10000000(0x80)だ。最上位ビットが符号を示す。このツールは2の補数表現ではなく先頭のマイナス符号で負の整数を表示する。2の補数は固定のビット幅でのみ意味を持つが、ツールは任意精度の BigInt を使用するため解釈すべき固定幅がないからだ。

16進数がA〜Fを使う理由は?

基数16には16の異なる桁記号が必要で、10進数字0〜9は10しか提供しない。10〜15にA〜F(大文字小文字区別なし)を使う慣習は1960年代のIBM System/360によって普及し、業界全体で標準化された。初期のシステムは他のグリフを試みた(BendixのG-15はu、v、w、x、y、zを使った)が、A〜Fが勝った。

このツールは分数を扱えますか?

いいえ、整数のみだ。分数の基数変換はより複雑で、ほとんどの10進分数は2進数に正確な表現を持たない(有名な 0.1 + 0.2 ≠ 0.3 浮動小数点問題)。浮動小数点のビットレベル検査には専用のIEEE 754ビジュアライザーが適切なツールだ。

何かサーバーに送信されますか?

いいえ。変換はブラウザ内でJavaScriptネイティブの BigInt 演算を使って実行される。入力に関する情報はページから出ない;ツールは読み込み後オフラインで動作する。

関連ツール