基数変換のガイド:10進数・2進数・8進数・16進数を一度に
基数の変換自体は簡単です。難しいのは、それが「数」なのか「バイト列」なのかを見極めることです。このツールが扱うのは数です。
ハードウェアとパーミッションの日常
レジスタ資料に 0x1F とあり、コードでは第5ビットを判定する。Linux のパーミッション 755 は8進数。デザインの色コードは CSS で3バイトに分ける。いずれも基数の行き来が必要です。
ビットマスクではより明確です。1を4ビット左に移すと16で、0x10 で、0b10000 です。4つの基数を並べて見れば、1桁の誤りが動作を変える場面でも、暗算より確実です。
- レジスタ値やプロトコルフィールドの確認
- 8進数のパーミッションビットの変換
- 色コードとビットマスクの照合
- AND や OR の結果のデバッグ
接頭辞と精度
0x は16進数、0b は2進数、それ以外は10進数として読みます。桁区切りのカンマは使えません。数字の途中に空白を入れるのも避けてください。8進数の専用接頭辞はありませんが、解析は JavaScript の数値リテラルに従うため、0o 形式も通常は読めます。
計算は JavaScript の数値で行うため、安全な整数の上限は2の53乗から1を引いた値です。これを超えると下位の桁が静かに変わります。64ビットの ID やハッシュの先頭には BigInt を使ってください。
- 0x は16進数、0b は2進数、他は10進数
- 桁区切りや途中の空白は不可
- 2の53乗を超えると精度が落ちる
境界:切り捨て、ビット幅、バイト順
小数を含む入力は整数に切り捨てられます。出力が整数のみだからです。負数や指数表記の扱いは入力の解釈に依存するため、必要なら結果を確認してください。8ビットや16ビットへのゼロ埋めも行いません。
バイト順は扱いません。0x1234 は数として 4660 ですが、メモリ上で 12 34 になるか 34 12 になるかは機械とプロトコル次第です。この2つを混同すると、通信の不具合の原因を特定できなくなります。
- 小数は四捨五入せず切り捨て
- 8 / 16 / 32ビットへのゼロ埋めはしない
- ビッグエンディアンとリトルエンディアンは扱わない
よくある質問
大きな数の下位桁が変わるのはなぜですか
内部で倍精度浮動小数点数を使うため、2の53乗から1を引いた値を超えると正確に保持できません。変換規則ではなく数値型の限界です。64ビット整数には BigInt か任意精度のツールを使ってください。
0x や 0b は必須ですか
その基数で読みたいなら必要です。接頭辞がないと10進数として読むため、英字だけの16進数は失敗し、0x1F は31になります。16進数の英字は大文字小文字どちらでも構いません。
小数はなぜ消えるのですか
出力が整数のみで、小数部は四捨五入ではなく切り捨てられるからです。小数を残したい場合は、変換先の基数での表し方を決めてから、小数対応のツールを使ってください。
関連ツール:基数変換ツール