1の補数(、英: ones' complement)は、2 を位取り記数法の基数とした場合の減基数の補数である[2][4][6]。すなわち、整数 x との和が 2 の冪乗 2n から 1 を引いた数に等しい数 xc = (2n − 1) − x のことをいう(例:24 − 1 = 15 について、4 に対する1の補数は 11)。
数 x とその1の補数 xc を二進法で表せば、1の補数 xc は x との和が n 桁の二進数として表せる最大の数となる数といえる(例:24 − 1 = 11112 について[注 1]、410 = 01002 の1の補数は 1110 = 10112)。
二進法において、ある数の1の補数を反数と見なせば、決まった桁数の二進数をそれぞれ非負の数と負の数に対応づけられる(#負の数の表現)。
1の補数表現はコンピュータの分野において、固定長の符号付きの整数型などの表現として利用されることがある。
負の数の表現
1の補数を用いて二進数を負の整数に対応づけられる。1の補数の定義より、n 桁の二進数 x とその補数 xc は以下の関係を満たす:
右辺の 2n − 1 の倍数を 0 と同一視すれば、上記の関係は以下のように解釈できる:
これは x の補数 xc を x の反数 −x と見なすことを意味する。
1の補数表現
#負の数の表現節の方法で反数および減法が定義されているとする。更に 0 から 2n−1 − 1 までの非負整数をそのまま通常の位取り記数法における二進表示、
に対応づければ、これらの数の補数として負の整数に対する1の補数表現が得られる。
具体例として、n = 4 桁の二進数における対応表を以下に示す:
24 についての1の補数表現における、二進数と対応する整数の一覧
対応する整数 |
二進数 |
対応する整数 |
二進数
|
0 |
00002
|
0 |
11112
|
1 |
00012
|
−1 |
11102
|
2 |
00102
|
−2 |
11012
|
3 |
00112
|
−3 |
11002
|
4 |
01002
|
−4 |
10112
|
5 |
01012
|
−5 |
10102
|
6 |
01102
|
−6 |
10012
|
7 |
01112
|
−7 |
10002
|
結局、n 桁の二進数の k + 1 桁目の値を bk ∈ {0, 1} とすれば、1の補数表現は以下のように表せる:
1の補数表現における演算
1の補数で表される数は、対応する二進数表示の最上位の値 bn−1 が 0 なら負でない値を取り、1 なら正でない値を取る。
1の補数表現において、二進数をビット列とみなせば、符号の反転はビット列 x のビットを反転[注 2]することによって行える。x とそれをビット反転させた fx は常に以下を満たす:
上記より、x の1の補数は xc = fx と表せる。従って減法は、
と書き換えられる。ビット反転が反数に対応することから、0 は 000...002 と 111...112 の2つの表現方法を持つ。
脚注
注釈
- ^ 下付きの添字は位取り記数法の基数を表す。
- ^ ここでビット反転とは各ビットに対する否定演算を指す。すなわち入力が 0 なら 1 を出力し、入力が 1 なら 0 を出力する。
出典
参考文献
- 日本規格協会、情報処理学会 編『JIS X 0005:2002 情報処理用語(データの表現)』日本規格協会、2002年8月31日。
- ISO; IEC, eds (2015-05). ISO/IEC 2382:2015 Information technology — Vocabulary. ISO/IEC
関連項目