DevToolBox

16進数の補数(2の補数)の求め方 - 負の数の表現方法Two's complement in hexadecimal: representing negative numbers

最終更新日: 2026-07-21公開日: 2026-07-21執筆: DevToolBox編集部

0xFB が、8bitの符号付き整数ではなぜ -5 になるのでしょうか。16進数の負の数や マイナス値は、固定したビット幅の中で2の補数として表すのが一般的です。この記事では 「16進数 補数」の意味から、補数計算・補数変換、符号ありの16進数を読む方法まで、8bitの具体例で整理します。

Negative hexadecimal values are normally encoded in a fixed-width bit pattern using two's complement. This guide explains why computers use it, how to calculate it, and how to interpret the sign bit with an 8-bit example.

TL;DR

Hex Converter

16進数を入力して変換結果を確認できます。2の補数を手計算した後の検算にも利用できます。

今すぐ試す →

1. なぜマイナス記号ではなく補数を使うのか / Why complement notation is used

人が書く数値なら -5 のようにマイナス記号を追加できます。しかしCPUのレジスタやメモリに保存される整数は、 8bit、16bit、32bitなど長さが固定された0と1の列です。マイナス記号専用の文字を別に置かず、 決められたビット列の中に符号と数値を一緒に収める必要があります。

2の補数なら同じ加算回路で正数と負数を計算でき、最上位からあふれた桁を捨てるだけで減算も実現できます。 8bitでは 5 + 0xFB = 0x100 となり、9bit目を捨てると 0x00、つまり5 + (-5) = 0 です。これがコンピュータアーキテクチャで補数を使う理由です。

2. 1の補数と2の補数の違い / One's vs two's complement

方式求め方8bitで-5特徴
1の補数全ビットを反転0xFA+0と-0が存在する
2の補数全ビットを反転して+10xFB0が1種類で加減算を共通化できる

両者は名前が似ていますが、最後の +1 の有無が重要です。現代のCPUやプログラミング言語で 実務上使われる符号付き整数表現は、ほぼ2の補数です。

3. 8bitの-5を16進数へ変換する手順 / Converting -5 to 8-bit hex

16進数の補数計算は、同じビット幅の2進数として考えると明確です。

1. +5を8bitにする
00000101 = 0x05
2. 全ビットを反転
11111010 = 0xFA
3. 1を足す
11111011 = 0xFB
  00000101  = 0x05  (+5)
→ 11111010  = 0xFA  (ビット反転: 1の補数)
+ 00000001
------------
  11111011  = 0xFB  (2の補数、つまり-5)

よって8bit符号付き整数の -50xFB です。16bitや32bitでも手順は同じで桁数だけが変わり、 16bitでは 0xFFFB、32bitでは 0xFFFFFFFB になります。

4. 符号ビットと8bitの値の範囲 / Sign bit and 8-bit ranges

2の補数では最上位の符号ビットが0なら非負、1なら負です。同じビット列でも符号あり・なしで値が変わります。

最上位ビット16進数の範囲8bit符号付きの値
00x00〜0x7F0〜127
10x80〜0xFF-128〜-1

0xFF は符号なし8bitなら255、符号付き8bitなら-1です。「16進数 負の値」を判断するときは、ビット幅と符号ありか符号なしかを確認してください。16進数自体ではなく、解釈する型が意味を決めます。

5. JavaScriptで2の補数を確認する / Verify with JavaScript

JavaScriptのビット演算は内部で32bit符号付き整数を使うため、8bitの結果は & 0xFF で取り出します。

const value = 5;

// 全ビット反転して1を足し、下位8bitだけを残す
const twosComplement = (~value + 1) & 0xFF;
twosComplement.toString(16).toUpperCase(); // "FB"

// 2^8から値を引く別解法
const anotherWay = (0x100 - value) & 0xFF;
anotherWay.toString(16).toUpperCase(); // "FB"

// 8bitの符号付き整数として読み戻す
const hex = 0xFB;
const signed = hex & 0x80 ? hex - 0x100 : hex;
console.log(signed); // -5

一般にN bitの負数 -x のパターンは 2^N - x です。マスクも8bitなら0xFF、16bitなら 0xFFFF のように幅を合わせます。

6. よくある間違い / Common mistakes

English summary

Two's complement stores a negative number inside a fixed-width bit pattern, allowing hardware to use ordinary binary addition for positive and negative values. To encode -5 in 8 bits, start with 0x05, invert every bit to get 0xFA, then add one to get 0xFB. The sign bit is 0 for non-negative values and 1 for negative values. The procedure is unchanged for 16-bit and 32-bit integers; only the width changes.

まとめ / Summary

16進数のマイナス計算では、まずビット幅と符号付きを確定します。2の補数は「全ビット反転して1を足す」、 または「2のビット幅乗から絶対値を引く」ことで求めます。8bitの-5は 0x05 → 0xFA → 0xFB です。 結果は Hex Converterで実際に試せます。

Hex Converter

HEX・テキスト・バイナリの変換をブラウザ内で実行。2の補数のビット列や16進表記の確認に使えます。

今すぐ試す →

関連ツール / Related tools

関連ガイド / Related guides