基数変換
値を一つ入れると2進・8進・10進・16進をまとめて示し、36進までの任意の基数にも変換できます。すべてBigIntで計算するので長さの制限がありません — 64ビットのIDをparseIntに渡すと2^53を超えた時点で静かに狂うので、この道具はそれを避けるためにあります。
よく使う基数
2進から36進まで。9より上の桁は a〜z で書きます。
変換
- 2進
- 1111 1111
- 8進
- 377
- 10進
- 255
- 16進
- ff
- 36進
- 73
ビットで見ると
2の補数で書いています。負の数は幅を決めるまでビット列になりません。
- 8 bit
- 11111111
- 16 bit
- 00000000 11111111
- 32 bit
- 00000000 00000000 00000000 11111111
- 64 bit
- 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111111
符号ありとして読む -1 · 符号なしとして読む 255
符号ありとして読む 255 · 符号なしとして読む 255
符号ありとして読む 255 · 符号なしとして読む 255
符号ありとして読む 255 · 符号なしとして読む 255
値は BigInt で扱うので長さに制限はありません。JavaScript の Number は 2^53 を超えると精度を失います — 64ビットの ID が黙って狂うのは、まさにそこです。
選ぶのは入れた値の基数だけです
2・8・10・16はボタンで、それ以外は隣の数字欄に2から36までを書きます。結果はいつも2・8・10・16進をまとめて出し、「その他の基数」がその四つに無ければ一行増えます。9を超える桁はa〜zで書き、大文字と小文字は区別せず、出力は小文字です。
読めないと返される場合
その基数に無い桁が一つでも混ざると、値全体を読めないと返します — 8進の 9、16進の g がそれです。0x・0b・0o の接頭辞は選んだ基数と合うときだけ外すので、16進で 0b10 は2進数ではなく b10 という16進数(2832)です。下線・空白・カンマはどこにあっても桁区切りと見て取り除きます。
ビット表が言っていること
8・16・32・64ビットの幅ごとに2の補数のビット列を8桁ずつ区切って示し、同じビットを符号付き・符号なしで読んだ値を並べます。255 は8ビットでは 11111111 で、符号付きで読めば −1、符号なしなら255です。一つの幅に収まるのは −2^(幅−1) から 2^幅−1 までで、外れれば切り詰めずに「収まりません」とだけ書きます。
ブラウザの中で終わります
打つそばからその場で計算し直します。入れた値はサーバーへ行かず、どこにも保存しないので、内部IDをそのまま入れて構いません。
よくある質問
負の数はどう出ますか
値そのものは符号を持ち、下のビット表では8・16・32・64ビットの2の補数を示します。2の補数のビット列は幅を決めて初めて存在するので、幅を言わずに「−5の2進数」に答えれば、それは答えではなく当て推量になります。
0x や 0b を付けたまま貼れますか
貼れますが、選んだ基数と合っているときだけです — 10進では 0x10 は接頭辞ではなく、読めない値です。桁区切りの下線・空白・カンマは、どの基数でも無視します。
どれくらい大きい数まで扱えますか
制限はありません。全体をBigIntで扱うので、何百桁でも正確なままです。ビット表は64ビットまでで、収まらない値は切り詰めずに「収まりません」と返します — 切り詰めた値は、間違った値と見分けが付かないからです。
8ビットの行の符号付きの値が負になるのはなぜですか
2の補数では先頭のビットが1なら負です。200 は8ビットに収まりますが、符号付きで読むと −56 です。間違いではなく、コードで int8 として受け取ればその値になる、という意味です。
結果の空白は値の一部ですか
違います。2進は4桁、16進は2桁、ビット表は8桁ずつ、読みやすさのために空けているだけです。コードに使うときは消してください。この道具に貼り戻すときはそのままで読めます。