基数変換

値を一つ入れると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

符号ありとして読む -1 · 符号なしとして読む 255

16 bit
00000000 11111111

符号ありとして読む 255 · 符号なしとして読む 255

32 bit
00000000 00000000 00000000 11111111

符号ありとして読む 255 · 符号なしとして読む 255

64 bit
00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111111

符号ありとして読む 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桁ずつ、読みやすさのために空けているだけです。コードに使うときは消してください。この道具に貼り戻すときはそのままで読めます。