1の補数
数 x とその1の補数 xc を二進法で表せば、1の補数 xc は x との和が n 桁の二進数として表せる最大の数となる数といえる(例:24 − 1 = 11112 について[注 1] 、410 = 01002 の1の補数は 1110 = 10112)。
二進法において、ある数の1の補数を反数と見なせば、決まった桁数の二進数をそれぞれ非負の数と負の数に対応づけられる(#負の数の表現)。
1の補数表現はコンピュータの分野において、固定長の符号付きの整数型などの表現として利用されることがある。
負の数の表現
[編集 ]1の補数を用いて二進数を負の整数に対応づけられる。1の補数の定義より、n 桁の二進数 x とその補数 xc は以下の関係を満たす:
- {\displaystyle x+x_{\mathrm {c} }=2^{n}-1,円.}
右辺の 2n − 1 の倍数を 0 と同一視すれば、上記の関係は以下のように解釈できる:
- {\displaystyle x+x_{\mathrm {c} }\equiv 0,円.}
これは x の補数 xc を x の反数 −x と見なすことを意味する。
- {\displaystyle y-x\equiv y+x_{\mathrm {c} },円.}
1の補数表現
[編集 ]#負の数の表現節の方法で反数および減法が定義されているとする。更に 0 から 2n−1 − 1 までの非負整数をそのまま通常の位取り記数法における二進表示、
- {\displaystyle 0_{2},1_{2},{10}_{2},\dots ,\underbrace {011\cdots 11} _{n{\text{桁}}}{}_{2}}
に対応づければ、これらの数の補数として負の整数に対する1の補数表現が得られる。
具体例として、n = 4 桁の二進数における対応表を以下に示す:
対応する整数 | 二進数 | 対応する整数 | 二進数 |
---|---|---|---|
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の補数表現は以下のように表せる:
- {\displaystyle {b_{n-1}b_{n-2}\cdots b_{1}b_{0}}_{(2)}\mapsto \sum _{k=0}^{n-2}{b_{k}\cdot 2^{k}}-b_{n-1}\cdot (2^{n-1}-1),円.}
1の補数表現における演算
[編集 ]1の補数で表される数は、対応する二進数表示の最上位の値 bn−1 が 0 なら負でない値を取り、1 なら正でない値を取る。
1の補数表現において、二進数をビット列とみなせば、符号の反転はビット列 x のビットを反転 [注 2] することによって行える。x とそれをビット反転させた fx は常に以下を満たす:
- {\displaystyle x+{}^{\mathrm {f} }x\equiv 0,円.}
上記より、x の1の補数は xc = fx と表せる。従って減法は、
- {\displaystyle y-x\equiv y+{}^{\mathrm {f} }x}
と書き換えられる。ビット反転が反数に対応することから、0 は 000...002 と 111...112 の2つの表現方法を持つ。
脚注
[編集 ]注釈
[編集 ]出典
[編集 ]- ^ JIS X 0005:2002 2002, 05.08.07 1の補数.
- ^ ISO/IEC 2382:2015 2015, 2. Terms and definition. 2121103. ones complement.
- ^ JIS X 0005:2002 2002, 05.08.02 基数の補数.
- ^ ISO/IEC 2382:2015 2015, 2. Terms and definition. 2121098. radix complement.
- ^ JIS X 0005:2002 2002, 05.08.01 補数.
- ^ ISO/IEC 2382:2015 2015, 2. Terms and definition. 2121097. complement.
参考文献
[編集 ]- 日本規格協会、情報処理学会 編『JIS X 0005:2002 情報処理用語(データの表現)』日本規格協会、2002年8月31日。
- ISO; IEC, eds (2015-05). ISO/IEC 2382:2015 Information technology — Vocabulary. ISO/IEC