

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
2の補数表現とは?
2の補数表現は、固定幅の二進数で数を表すときの代表的な方法です。正の数はそのままの見た目で表現されますが 負の数は特別な計算で表現されます。この仕組みを使うと数の計算を機械的に同じルールで処理できるため CPU や回路設計がシンプルになります。
なぜ2の補数表現なのか
加算器だけで減算を実現できるようにするための工夫として広く採用されています。負の数を別の表現として用意するのではなく、正の数と負の数を同じ計算規則で扱えるのが大きな利点です。また2の補数表現では0を1つだけ定義しますので表現の一貫性が保たれます。
基本の考え方
幅を n ビットとすると負の数を表すには次の考え方が使われます。負の数を表すには2のn乗からその絶対値を引くことで表現します。正の数は通常どおり0から2のn乗の半分 minus 1まで表せます。符号ビットは最上位ビットと呼ばれ左端のビットが0なら正、1なら負を意味します。
8ビットの具体例
身近な例として8ビットを使います。正の数は 00000000 から 01111111、負の数は 10000000 から 11111111 の範囲になります。例えば -1 は 11111111、-128 は 10000000、0 は 00000000、7 は 00000111 です。これらは 2の補数表現における規則に従います。
どうやって計算するのか
負の数を得る代表的な方法は次の2つです。方法A 自分の数をビットを反転させてから1を足す。方法B 2のn乗からその絶対値を引く。いずれも同じ結果になります。
加算とオーバーフローの関係
2の補数表現では加算で減算を処理できるためハードウェアが単純になりますが、表現できる範囲を超えると結果がずれてしまうオーバーフローが起こります。代表的な例としては 127 + 1 が -128 に見えるなどが挙げられます。日常的には符号が突然変わる兆候として検出回路で対応します。
8ビットの表と要点のまとめ
以下の表は -8 〜 7 を8ビットの補数で表した一部です。負の数はすべてビットを反転してから1を足すという手順で作られます。
| decimal | binary | two's complement |
|---|---|---|
| -8 | 11111000 | 248 |
| -7 | 11111001 | 249 |
| -6 | 11111010 | 250 |
| -5 | 11111011 | 251 |
| -4 | 11111100 | 252 |
| -3 | 11111101 | 253 |
| -2 | 11111110 | 254 |
| -1 | 11111111 | 255 |
| 0 | 00000000 | 0 |
| 1 | 00000001 | 1 |
| 2 | 00000010 | 2 |
| 3 | 00000011 | 3 |
| 4 | 00000100 | 4 |
| 5 | 00000101 | 5 |
| 6 | 00000110 | 6 |
| 7 | 00000111 | 7 |
まとめ
2の補数表現は負の数を表すための統一的な方法であり、飽くまで固定幅の中での表現です。幅を決めておくこと、符号ビットの扱い、そしてオーバーフローの概念を理解することが、初心者がつまずかずに学ぶコツです。
2の補数表現の同意語
- 2の補数表現
- 正の整数は通常の二進数で表し、負の整数は2の補数を使って表す、コンピュータで符号付き整数を扱う基本的な表現方法。
- 二の補数表現
- 同じ意味で、負の数を2の補数で表す二進数の表示方法。
- 2の補数形式
- 2の補数を用いる表示形式のこと。
- 二の補数形式
- 2の補数を利用した表示形式(別称)。
- 2の補数表示
- 負の数を表すとき2の補数を使う表示方法。
- 二の補数表示
- 同義。負の数を2の補数で表示する方法。
- 2補数表現
- 2の補数を使う表現の略式。
- 2補数表示法
- 2の補数を用いた表示方法の名称の一つ。
- 補数表示法(2の補数)
- 符号付き整数を表す表示法の一種で、2の補数を用いる。
- 二進補数表示
- 二進数で2の補数として表現する表示方法のこと。
- 2の補数表現法
- 2の補数を用いた表現方法の別称。
- 二の補数表現法
- 2の補数を用いた表現方法の別称。
2の補数表現の対義語・反対語
- 原码表現
- 2の補数表現の対義語としてよく挙げられる、符号付き原符号表現の一つ。符号ビットと絶対値の桁を分けて数を表す方式で、正の数は符号ビットが0、負の数は符号ビットが1となる。+0と-0が別々に存在する点が特徴で、加算・減算のルールは2の補数とは異なる。
- 一の補数表現
- 負の数をビットをすべて反転して表す表現。ゼロは +0 と -0 の二つが存在する。加算時の扱いがやや複雑になることがあり、2の補数表現ほど自然な桁上がりの伝搬が起きにくい。
- 無符号表現
- 符号を持たず、全てのビットを非負の整数として扱う表現。負の数を表現できないため、2の補数の対になる概念としては「無符号表現」が挙げられる。
2の補数表現の共起語
- 2の補数
- 負の整数を表す主流のビット表現。正の数と0はそのまま表現され、負の数はビットを反転して1を足す操作で得られます。
- 1の補数
- 負の数を表す古い表現方法。ビットを反転するだけで表現しますが、0の正負が区別されない欠点があります。
- 補数
- 1の補数と2の補数を総称した概念。数値を別の形で表すための処理系統の一部です。
- 符号付き整数
- 正負の値を同時に扱える整数データ型。2の補数はこの表現の標準的な実装です。
- ビット
- 0か1の最小情報単位。すべての数値はビット列として表現されます。
- ビット表現
- 数値を0と1の並びで表す方法。2の補数はその一形態です。
- 符号ビット
- 最上位ビットが符号を示す役割を持つことが多く、正数は0/負数は1として扱われます。
- 最小値
- nビット表現での最小値は -2^(n-1) 。例: 8ビットなら -128。
- 最大値
- nビット表現での最大値は 2^(n-1) - 1 。例: 8ビットなら 127。
- オーバーフロー
- 演算結果が表現可能な範囲を超える現象。幅が決まっている2の補数表現では特に注意します。
- ゼロ拡張
- データ幅を広げるとき、上位ビットを0で埋める操作です。
- 符号拡張
- データ幅を広げるとき、符号ビットを用いて上位ビットを埋める操作。負数は1で埋めることが多いです。
- 算術シフト
- 右方向へシフトするとき、符号ビットを保ってシフトします(符号付き数の移動)。
- 論理シフト
- 右方向へシフトするとき、符号を気にせず上位を0で埋める操作です。
- ビット演算
- AND/OR/XOR/NOT などの低レベルなビット操作。2の補数の演算にも使われます。
- ビット反転
- NOT演算。ビットを0↔1に反転させる操作で、1の補数作成や一部の演算で利用されます。
- 加算
- 2の補数表現での数の加算は基本的な演算で、 wrap-around によって結果が決まります。
- キャリー
- 加算時に生じる進位情報。オーバーフロー判定にも関連します。
- 借り
- 減算の際の借りの概念。2の補数では減算を加算として扱い、特別な借りの扱いを避けます。
- 32ビット整数
- 最も一般的な幅の一つ。表現範囲は -2147483648 〜 2147483647 です。
- ビット幅
- データの長さ(8/16/32/64ビットなど)を指し、表現できる範囲に影響します。
- 負数
- 負の値を表現する概念。2の補数が広く使われます。
- 正数
- 正の値を表す概念。2の補数表現でもそのまま正しく表されます。
- ゼロ
- 0の表現。2の補数では0は一意で、正負のゼロの区別はありません。
2の補数表現の関連用語
- 2の補数表現
- 最も一般的な符号付き整数の表現で、nビットのうち最上位ビットを符号として扱います。正の数は MSB が 0、負の数は 2の補数として表現され、0 は一意の表現になります。
- 二の補数
- 2の補数表現と同じ意味の別称。負の数は |x| の補数を取って 1 を加えることで得られます((~x) + 1)。
- 符号付き整数
- 正負の値を表現できる整数。通常は先頭のビットを符号ビットとして用い、残りのビットで絶対値を表します。
- 符号なし整数
- 0 から最大値までの値を扱う整数で、最上位ビットを符号としては使いません。
- ビット幅
- 整数を表現するビットの総数。例: 8/16/32/64ビット。幅が大きいほど表現できる範囲が広がります。
- 最上位ビット(MSB)
- 一番左のビット。2の補数表現では符号ビットとして機能し、0なら正、1なら負を示します。
- 負の数の表現
- 負の数は2の補数表現を用いてビット列で表します。
- 正の数の表現
- 正の数は MSB が 0 のパターンで表現されます。
- オーバーフロー
- 計算結果が表現可能な範囲を超える現象。2の補数表現では符号ビットの整合性で判定します。
- オーバーフロー検出
- 加算では「符号ビットが同じとき、結果の符号が異なるときに発生」などの規則を用いて検出します。
- ゼロ表現
- 2の補数表現では 0 が一意に存在します(+0 と -0 の区別がありません)。
- 1の補数
- 別の負数表現。負の数はビットを反転して 1 を加えることで得られる2の補数と異なり、反転のみの表現となる点が特徴です。
- 符号拡張
- ビット幅を拡張するとき、最上位ビットを繰り返して符号を保つ操作です。
- ビット反転と加算1
- 負の表現は x のビットを反転して 1 を加えることで得られ、 (~x) + 1 がその値です。
- 減算を加算で実現
- a - b は a + (~b + 1) の形で実現でき、同じ加算回路を使えます。
- 2の補数の範囲
- n ビット時の表現範囲は -2^(n-1) 〜 2^(n-1) - 1 です。
- 2の補数の例(8ビット)
- 8ビットの例として、-1 は 11111111、-128 は 10000000、3 は 00000011 です。
- 現代の言語とハードウェアにおける採用状況
- ほとんどの現代的な言語とハードウェアは2の補数表現を採用していますが、仕様上の保証は言語仕様によって異なる場合があります。
2の補数表現のおすすめ参考サイト
- 2の補数表現|やさしい基礎理論 | 基本情報技術者試験 受験ナビ
- 2の補数表現|やさしい基礎理論 | 基本情報技術者試験 受験ナビ
- 【基礎からわかる】1の補数・2の補数とは?計算方法と役割を解説
- 2の補数とは - IT用語辞典 e-Words
- 補数表現とは?1の補数と2の補数の違いと計算方法まとめ
- 2の補数とは? - Web便利ノート



















