プログラミングの基礎

【超簡単】プログラミングをするなら知っておきたい2の補数表現と計算方法とは…?

トビタカ
トビタカ
本記事ではプログラミングでよく使用する『2の補数表現』に関して解説しています。

2の補数表現の意味と計算方法とは…?

 

2の補数表現ってどういう意味…?

 

2進数を使うときに必ず出てくる『2の補数表現』ですが…

正直、分かりづらいですよね?

とび助
とび助
説明を聞いても全然わかりませんでした…
トビタカ
トビタカ
たしかに分かりづらいんですよね…

 

ご安心ください。

実は2の補数表現の必要性を考えれば、簡単に理解することができます。

本記事では『2の補数表現の意味と計算方法』をご紹介していますので、ぜひ参考にしてみてください!

トビタカ
トビタカ
きっと納得してもらえると思います!
とび助
とび助
期待しています!

 

2の補数表現って何なの…?

とび助
とび助
そもそも2の補数表現って何なんですか…?
トビタカ
トビタカ
かんたんに言うと次のようになります!

 

2の補数表現を簡単に言うと次のようになります。

2の補数表現の定義

2進数でマイナスの数値を表す手段

とび助
とび助
あれ?もっと難しい意味だったような…
トビタカ
トビタカ
次の論文でも言われている通り、実はとってもシンプルなんです!

 

計算機の内部では2進整数の負数は´2の補数´表現が使用されている。

引用:可視化情報-CPUのデータ幅を活用した画像データ処理法

2の補数の計算方法

早く2の補数の意味を説明したいのですが、きちんと理解していただけるように、先に計算方法をご紹介します。

繰り返しになりますが、2の補数表現とは『2進数でマイナスの数値を表すやり方』です。

そのため、2の補数は『0と1を組み合わせた2進数』であることが分かります。

では、この2の補数の数値はどうやって求めればいいのでしょうか?

トビタカ
トビタカ
実はとっても簡単なんです!

 

2の補数の求め方は次の通りです。

2の補数の求め方

(2進数の逆数) + 1

とび助
とび助
本当にこれだけ…?
トビタカ
トビタカ
本当にこれだけです!

 

具体例を一緒に確認していきましょう。

ここでは8bitの2進数である0000 1111を例にしてご説明していきます。

ちなみに0000 1111を10進数で表すと15になります。

 

 

まずはこの0000 1111の逆数である『1の補数』を考えていきます。

逆数とは0なら1、1なら0と交換することです。

とび助
とび助
つまり、1111 0000ってことでいいですか…?
トビタカ
トビタカ
OKです!

 

逆数がわかったら、あとは+1をしていきましょう。

1111 0000 + 0000 0001を計算すれば2の補数を求めることができるのです。

トビタカ
トビタカ
よって0000 1111の2の補数は1111 0001になります!
とび助
とび助
計算方法は簡単なんですね!

2の補数表現の存在意義

とび助
とび助
計算方法はわかりましたが、何で2の補数がマイナスの数値を表すんですか…?
トビタカ
トビタカ
それは、2進数の足し算で『あること』をやりたいからなんです!

 

ここからはお待ちかねの『2の補数がマイナスの値を意味する理由』をご説明していきます。

と、その前にクイズです。

次の計算式はいくつになるでしょうか?

簡単な足し算

15 + (-15)

とび助
とび助
バカにしないでください!『0』に決まっています!
トビタカ
トビタカ
馬鹿にはしていません!実はこの考え方が重要なんです!

 

お分かりの通り、『15 + (-15)』の答えは『0』です。

この計算のように、10進数では『正負が異なる同じ値を足すと必ず0になる』というルールがあります。

このルールを2進数でも実現させたいのです。

とび助
とび助
じゃあ、2進数でもマイナスを使えばいいじゃないですか…?
トビタカ
トビタカ
残念ながら2進数では、マイナスの記号は使えないんです。

 

ご存知の通り、2進数は『0』と『1』だけで構成される数値です。

そのため、マイナスの記号は使えません。

マイナスの値を『0』と『1』だけで表現しなければいけないのです。

トビタカ
トビタカ
つまり『0』と『1』だけで、『正負が異なる同じ値を足すと0になる』というルールを実現させたいのです。
とび助
とび助
それを実現する方法が2の補数表現ってことですね…?
トビタカ
トビタカ
まさにその通りです!

2の補数がマイナスの数値であることを確認しよう

では、2の補数を使うことで『2進数で正負が異なる同じ値を足すと0になる』ことを確認していきましょう。

『0101 + 0011 = 1000』のように、2進数の計算で1+1をすると、桁が繰り上がっていくのはご存知の通りだと思います。

では、『0101』に2の補数である『1011』を足し合わせるとどうなると思いますか?

とび助
とび助
桁を繰り上げていくと…
あれ?桁が足りなくなりますね…
トビタカ
トビタカ
そうです!桁あふれが発生して(0001)0000になります。

 

一見、さきほどの計算式の答えは0001 0000になりそうな気がしますよね。

でも、実は違うんです。

コンピュータで取り扱える2進数の桁数は決まっているので、増えた桁の部分は無視されてしまいます。

トビタカ
トビタカ
つまり、4桁しか取り扱えない場合は0000になるのです!
とび助
とび助
なるほど!あふれた桁を無視できるから、2進数の足し算の答えを0にできるんですね!
トビタカ
トビタカ
その解釈でOKですよ!

 

コンピュータが取り扱える桁数が何桁であっても、2の補数は有効です。

例えば16bitの場合を見てみましょう。

0000 0000 1111 1111に2の補数である1111 1111 0000 0001を加えると、(0001) 0000 0000 0000 0000になります。

カッコの部分は桁あふれでなくなるので、計算結果が0になるのです。

まとめ

以上が2の補数表現の解説になります。

2の補数表現で2進数のマイナスの数値を表せる理由をご理解いただけたでしょうか?

コンピュータなどに使用するプログラムを書く場合、この知識は必ず必要となるので、ぜひ覚えておいてくださいね!

とび助
とび助
『正負が異なる同じ値を足すと0になる』というルールを2進数で実現するために2の補数が使われると理解しました!
トビタカ
トビタカ
その認識でOKです!
2の補数表現のまとめ
  • 2の補数表現とは『2進数でマイナスの数値を表す方法』である
  • 2の補数は『2進数の逆数 + 1』で求められる
  • 2の補数を使うことで『正負が異なる同じ値を足すと0になる』というルールを2進数でも実現できる
  • 2進数計算ではあふれた桁は無視されるので、元の数と2の補数を足すと0になっているように見える

 

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA