ITの初歩 基礎理論

補数って難しい?1の補数、2の補数?

2018年12月16日

2進数の計算を学習していると、最初の方に必ず出てくる「補数」ですが、何回聞いてもなかなか理解できなかったりします...

今回はこの補数に関して整理してみましょう!

そもそも補数とは?

先ず、補数とは補う数のことなのですが、何を補うのでしょうか?

それは、「元の数」「補数」を足した場合に桁上がりが発生する数のうち「最小」の数のことなんだそうです。既によく分からないですが...

さらにもう一つ、「減基数」という考え方もあります。

これは「元の数」と「補数」を足して桁上がりが発生しない数のうち「最大」の数が補数となります。

うーん、難しいですね(汗)

補数って言葉は2進数で「1の補数」、「2の補数」という言葉がよく出てきますが、実は2進数に限ったことではなく、10進数にも8進数にも16進数にも存在します。

10進数の場合は基数としての「10の補数」と減基数としての「9の補数」が存在します。つまり、n進数の補数表現には、それぞれ「nの補数」と「(nー1)の補数」が存在するのです。このnは「基数」であり、(n-1)は「減基数」です。

なので、2の補数は「n=2」の補数と「(n-1)=1」の補数の二つが存在します。

詳しい説明は以下サイトにありますので、ご参考にしてみてください。

・【1の補数とか】補数を理解したいです【2の補数とか】(unskilled.site)

・ 補数表現とは?1の補数と2の補数の違いと計算方法まとめ(ProEngineer)

2進数の補数の利用方法

補数が何となく理解できたところで、いよいよ2進数の補数のお話です。

まず、コンピュータは一般的に、2の補数を使って負の数をあらわします

2の補数によって負の数をあらわすと、加算処理の回路一つで、減算が行えるようになるので、回路をシンプルにすることができるのです。ここで、コンピュータは減算が行えないか?と言われると、実は直接引き算を行う回路(減算器)自体は存在するようです。但し、効率を考えると加算器の方がよく、減算器を導入する価値が未だ見つかっていないようですね...

1の補数と2の補数は以下のように求めることができます。

「0101」という4桁の2進数があった場合。【1の補数】1111 - 0101 = 1010

【2の補数】10000 - 0101 = 1011

この2の補数を元の数と足してみると。

0101 + 1011 = 10000

となり、4ビットの2進数だとあふれた5ビット目の1は無視されるので、計算結果としては「0000」つまり、0となります。

このように、ある数値に対する2の補数値は元の数の負の値として使えるという利点があります。このことからコンピュータは一般的に、負の数をあらわすのに2の補数を使っています。。

2の補数(負)の値の求め方は、元の数から2の補数を作った逆の計算を行えば良いので、例えば「11111111」という2の補数の値を10進数として求めるには、ビットを反転して「00000000」これに最下位のビットに1を加えて「00000001」となるので、答えは「-1」となります。

「11110001」の場合もビット反転し「00001110」となり、これに1ビット足して「00001111」なので、「-15」となりますね。

 

1の補数の使い道は?

2の補数が負の数としての利用価値があるのに対して、1の補数は何に使うのでしょうか?なんだかメリットが無さそうなのですが、1の補数が「ビット反転」と言う演算と見なすと実は使い道があるのです。

それは、画像処理で利用します!

例えば、白黒2値の画像(FAXに使われる画像ですね)の白と黒を入れ替える際に「ビット反転」と言う演算を行います。2の補数を取って1足せば同じ結果が得られますが、それでは2度手間になってしまいます。ビット反転は画像処理の世界では必須の演算の1つです。

ですので、1の補数は0と1が完全に反転することから、コンピュータ上で「ビット反転」の処理をしたい場合に使用することができます。

 

まとめ

今回は補数と2進数における1の補数、2の補数に関してまとめてみました。

2進数における2の補数はコンピュータで引き算を加算処理で行うために必要な考え方なのですね。

因みに2の補数と呼ばれる由来は、2の補数ががnビットの数字xで使われた場合に、x+(-x)は常に2n(一番左のビットが1の後にn個の0が続く)になるから、のようですね。(難しい...)

また、2進数の1の補数もビット反転として重要な役割があることも分かりましたね。

2進数の計算にはもう一つ、浮動小数点数という重要な考え方がありますので、これは別の記事で記載したいと思います。

以上です!

参考URL)

・【1の補数とか】補数を理解したいです【2の補数とか】(unskilled.site)

・ 補数表現とは?1の補数と2の補数の違いと計算方法まとめ(ProEngineer)

・「2の補数」「1の補数」について覚書

-ITの初歩, 基礎理論