2進数・10進数・16進数をブラウザ内で変換する
入力基数、Bit Width、Signed / Unsignedを指定し、整数と2の補数の結果を外部送信なしで確認できます。
進数変換ツールを開く結論:FFはUnsigned 8bitなら255、Signed 8bitなら-1
FF=15×16+15=255です。同じ8bit PatternをSignedで読むと255-256=-1になります。
16bitの00FFならSignedでも255です。FFという文字だけから-1と断定しません。
表示値だけで判断せず、元の基数・Bit Width・Signed / Unsignedを確認してください。
FFを数値と8bit Patternの両方で計算する
16進1桁は4bitなのでFFは8bitです。最上位bitが1でもUnsignedなら負数になりません。
現行ツールでは255を8bit Unsignedとして入力するとSigned結果-1を並べて確認できます。
| 確認対象 | 見る内容 | 判断 |
|---|---|---|
| Hex | FF | Unsigned 255 |
| Binary | 11111111 | 8bit |
| Unsigned | 0~255 | 255 |
| Signed | -128~127 | -1 |
進数変換ツールで確認する手順
- 16進数としてFFを入力します。
- 通常結果255を確認します。
- 2の補数欄を8bit・Unsignedにします。
- Signed結果-1を確認します。
Signedで-1を直接入力しても同じFF Patternになります。
FFが-1にならない条件
- 通常の16進数値として読む
- 16bitの00FFとして読む
- Unsigned Byteとして読む
符号情報は文字列FFではなくData TypeやProtocol仕様から決まります。
数値とBit Patternを分けて読む
2進数・10進数・16進数は、同じ数値を異なる基数で表せます。一方、固定長のBit PatternはSignedとして読むかUnsignedとして読むかで値が変わります。8bitの11111111はUnsignedなら255、Signed Two’s Complementなら-1です。FFや11111111だけを見て値を断定せず、元の基数、Bit Width、Signed / Unsignedをセットで記録します。
| Bit Pattern | Bit Width | 解釈 | 10進数 |
|---|---|---|---|
| 11111111 / FF | 8bit | Unsigned | 255 |
| 11111111 / FF | 8bit | Signed Two’s Complement | -1 |
| 00000001 / 01 | 8bit | Unsigned / Signed | 1 |
| 10000000 / 80 | 8bit | Signed Two’s Complement | -128 |
変換結果を共有するときは「FF」のみではなく、「0xFFをuint8として読む」「0xFFをint8の2の補数として読む」のように型の情報を添えます。これにより255と-1のどちらかを受け手が再現できます。
2の補数ではBit Widthを先に決める
固定幅の2の補数は2^BitWidthを法とするBit Patternです。同じ-1でも8bitは11111111、16bitは1111111111111111、32bitは1が32個になります。「-1を2進数にする」だけでは固定幅の答えを一意に決められません。
負数からPatternを求める代表的な手順は、正の絶対値を指定幅で書き、全bitを反転して1を加える方法です。逆変換では最上位bitが1ならUnsigned値から2^BitWidthを引きます。どちらの方向でも、Bit Widthを変えればPatternと表現範囲が変わります。
負数の幅を広げるSign Extensionでは上位を1で埋めます。正数またはUnsignedのZero Extensionでは上位を0で埋めます。Leading Zeroを省略できる数値表示と、桁数に意味がある固定幅Patternを混同しないことが重要です。
| Bit Width | Signed範囲 | Unsigned範囲 | -1のHex Pattern |
|---|---|---|---|
| 8bit | -128 ~ 127 | 0 ~ 255 | FF |
| 16bit | -32768 ~ 32767 | 0 ~ 65535 | FFFF |
| 32bit | -2147483648 ~ 2147483647 | 0 ~ 4294967295 | FFFFFFFF |
| 64bit | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 | FFFFFFFFFFFFFFFF |
変換結果がおかしい場合の切り分け
255と-1が食い違うときは変換式より先にData TypeのSignednessを確認します。
入力基数とPrefix、使えるDigit、Bit Width、Signed / Unsignedを順番に固定すると、計算式・表示形式・型のどこで意味が変わったかを切り分けられます。元値を別の基数へ変換した後、元の基数へ戻すRound Tripも行います。
- 入力元の仕様に記載された基数とBit Widthを確認する
- 0b・0o・0xと明示したInput Baseが一致するか確認する
- 固定幅PatternではLeading Zeroと最上位bitを保持する
- Signed・Unsignedの範囲外を暗黙に切り詰めない
- 変換後の値を元の基数へ戻して一致を確認する
現行の進数変換ツールで確認できる範囲
DevelopToolsの進数変換ツールは、2~36進数の整数と負数をBigIntで読み取り、2進数・8進数・10進数・16進数と任意の1基数へ変換します。入力値と変換結果はブラウザ内だけで処理され、サーバーへ送信・保存されません。
| 項目 | 現行ツールの動作 |
|---|---|
| 入力 | 符号、0b・0o・0x、カンマ・空白・アンダースコア、2~36進数の整数 |
| 通常変換 | 2・8・10・16進数と任意の1基数を同時表示。Hex英字の大文字・小文字を選択 |
| 表示 | 0b・0o・0xの付与、4桁または8桁ごとの区切りに対応 |
| 2の補数 | 8・16・32・64bitのSignedまたはUnsignedとしてBinary・Hex Bit Patternを表示 |
| 検証 | 無効Digit、Prefixと基数の不一致、Signed・Unsignedの範囲外を日本語で表示 |
| 未対応 | 小数、任意Bit Width、通常変換の任意桁Zero Padding、演算専用のSign/Zero Extension |
通常変換の-101は負号付きの数値表記で、固定幅の2の補数Bit Patternではありません。固定幅の負数を確認するときは「2の補数・符号付き整数」でBit Widthと入力値の解釈を指定します。
言語仕様と公式Documentationで確認する
言語固有の負数表示、整数幅、Overflowは各言語の公式Documentationを基準にします。JavaScriptではNumberの安全整数範囲とBitwise Operatorの32bit変換を区別し、64bit等の大きな整数にはBigIntを使います。
具体例:同じFFを255と-1として確認する
FFを通常変換し、次に8bit Patternとして読みます。
通常変換は255、8bit Signed結果は-1で、解釈の違いだと分かります。
- FF入力
- 255確認
- 8bit Unsigned指定
- -1確認
共有時は0xFF (uint8)または0xFF (int8)と型を添えます。
よくある質問
- 16進数のFFは255ですか、-1ですか?
- どちらにもなり得ます。8bit Unsignedなら255、8bit Signed Two’s Complementなら-1です。Bit WidthとSigned / Unsignedを確認してください。
- 2の補数を求めるときにBit Widthは必要ですか?
- 固定幅の2の補数表現には必要です。同じ-1でも8bitと16bitではBit Patternの桁数が異なります。
- 2進数へ変換したら先頭の0が消えるのはなぜですか?
- 数値としては先頭Zeroの有無で値が変わらないためです。固定幅のBit Patternが必要なら、必要なBit WidthまでZero Paddingします。