本文へ移動
Develop Tools
← 使い方ガイドへ戻る

16進数のFFは10進数でいくつ?255と-1になる違いを解説

FFは16進数のBit Patternとして11111111です。通常の16進数値なら255ですが、8bit Signed Two’s Complementなら-1になります。

入力基数とBit Width、SignedまたはUnsignedを確認して進数変換する流れ
入力基数とBit Width、SignedまたはUnsignedを確認して進数変換する流れ

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を並べて確認できます。

確認対象見る内容判断
HexFFUnsigned 255
Binary111111118bit
Unsigned0~255255
Signed-128~127-1

進数変換ツールで確認する手順

  1. 16進数としてFFを入力します。
  2. 通常結果255を確認します。
  3. 2の補数欄を8bit・Unsignedにします。
  4. 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 PatternBit Width解釈10進数
11111111 / FF8bitUnsigned255
11111111 / FF8bitSigned Two’s Complement-1
00000001 / 018bitUnsigned / Signed1
10000000 / 808bitSigned 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 WidthSigned範囲Unsigned範囲-1のHex Pattern
8bit-128 ~ 1270 ~ 255FF
16bit-32768 ~ 327670 ~ 65535FFFF
32bit-2147483648 ~ 21474836470 ~ 4294967295FFFFFFFF
64bit-9223372036854775808 ~ 92233720368547758070 ~ 18446744073709551615FFFFFFFFFFFFFFFF

変換結果がおかしい場合の切り分け

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で、解釈の違いだと分かります。

  1. FF入力
  2. 255確認
  3. 8bit Unsigned指定
  4. -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します。