2の補数
[Wikipedia|▼Menu]

この記事は検証可能参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。
出典検索?: "2の補数" ? ニュース ・ 書籍 ・ スカラー ・ CiNii ・ J-STAGE ・ NDL ・ dlib.jp ・ ジャパンサーチ ・ TWL(2016年1月)

2の補数(にのほすう)は、2、ないし2のべき乗の補数、またそれによる負の値の表現法である。特に二進法で使われる。(数学的あるいは理論的には、三進法における減基数による補数、すなわち 3n ? 1 = 2222....2222(3) による補数も「2の補数」であるが、まず使われることはない)

コンピュータの固定長整数型や、固定小数点数で、負の値を表現するためや加算器で減算をするために使われる。

頭の部分の1個以上の0を含む(正規化されていない)ある桁数の二進法で表現された数があるとき、その最上位ビット (MSB) よりひとつ上のビットが1で、残りが全て0であるような値(8ビットの整数であれば、1000000002 = 256)から、元の数を引いた数が2の補数である。MSBの重みが1であるような固定小数点表現の場合は特に「2」の補数となる。



2の補数表現からの変換

2 の補数は、2 進数表現で正と負の数を符号化する。各ビットの重みは2の累乗であるが、最上位ビットを除き、その重みは対応する2の累乗の負の値である。

N-ビットの整数 a N − 1 a N − 2 … a 0 {\displaystyle a_{N-1}a_{N-2}\dots a_{0}} の値 w は、次式で与えられる。 w = − a N − 1 2 N − 1 + ∑ i = 0 N − 2 a i 2 i {\displaystyle w=-a_{N-1}2^{N-1}+\sum _{i=0}^{N-2}a_{i}2^{i}}

最上位ビットは数値の符号を決定し、符号ビットと呼ばれることもある。符号と大きさの表現とは異なり、符号ビットは上記のように重み ?(2N???1) を持つ。N ビットを使うと、?(2N???1) から 2N???1 ? 1 までのすべての整数を表現することができる。

?36(十進法)が、8ビットで、2の補数でどのように表されるかを例として示す。

二進法8ビットで、36は 00100100 である。 100000000 (256)-) 00100100 (36)------------ 11011100 (220)

したがって、2の補数による?36の表現は 11011100 (220(10))である。

元の数 (00100100) と求められた (11011100) の2つの数を足し合わせると、すべての桁が 0 になり、負数が求められていることがわかる(最上位桁からの桁上がりの 1 は無視する)。
別の求め方

「1の補数に1を加える」という方法もある。算術的に考えると、(たとえばこの例の場合)「256 ? 36」という計算を「(255 ? 36) + 1」に分解している。

まず00100100 の各ビットを反転させる(1の補数を求める)と、11011011

次に1を加えると、 11011011+) 1----------- 11011100

得られた値は、上記の値と同じことが分かる。

2の補数をよく見てみると、1が出てくる最下桁までは元の数とビットが同じで、それよりも上の桁はビットが反転していることが分かる。そこで、計算の工程数をより削った方法として、1が出てくる最下桁までをそのままにして、それより上の桁のビットを反転させるという方法が考えられる。
1の補数

二進法における、減基数すなわち 2n ? 1 による補数を1の補数と言う。1の補数は、全ての桁が1である値から、元の値を引けば求まるが、各ビットの1を0に、0を1に、と反転させても求められる。00100100(元の数)11011011(1の補数)11011100(2の補数)
負の数の値

2の補数で表現された負の数の値を考えるには、二進法の各桁の重みについて、最上位ビット (MSB) のみ符号が反転したものとして計算すれば良い。

たとえば 11012 は、符号無しの二進法であれば、 2 3 + 2 2 + 2 0 = 8 + 4 + 1 = 13 {\displaystyle 2^{3}+2^{2}+2^{0}=8+4+1=13} であるが、2の補数表現による負の数であるとした場合は、 − 2 3 + 2 2 + 2 0 = − 8 + 4 + 1 = − 3 {\displaystyle \color {red}-2^{3}\color {black}+2^{2}+2^{0}=\color {red}-8\color {black}+4+1=-3} である。

1111 1111 1111 00012 のような、上位側に1が並んだ数の場合も同様にして求めてもよいが、正の数の時に、上位側の0を無視するように、1が連続する間は無視し、最後の1の重みを負として、そこから下位の桁について同様に計算してもよい。

1111 1111 1111 00012 の場合、?16 +1で、?15である。
十進法との対応

4桁の二進法(4ビット)で表現する場合

十進表記2の補数1の補数
701110111
601100110
501010101
401000100
300110011
200100010
100010001
000000000
1111
?111111110
?211101101
?311011100
?411001011
?510111010
?610101001
?710011000
?81000

関連項目

符号付数値表現

コンピュータの数値表現


更新日時:2021年10月12日(火)17:00
取得日時:2022/08/18 08:23


記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:7307 Bytes
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef