
前回の記事で2進数とか10進数、自然数(正の整数)の変換とか表現の仕方はわかったのですが、負の数はどのように表現するかが疑問です。

2進数で負数を表現するには2の補数を使って表現するよ!

2の補数?そもそも補数ってなんですか??

じゃあ今回は2の補数を使って2進数で負数を表現する方法を解説するよ!
そもそも「基数とは?」「2進数とは?」と疑問の方はこちらの記事を読んで理解してください!
- n進数の負数表現(マイナスの時の表現)
- n進数の小数点以下の表現
- n進数の四則演算
基数(n進数)の負数の表現方法
基数の足し算や引き算を行う前に知っておきたい表現方法に補数があります。
補数には1の補数とか2の補数があり、コンピュータによって異なり、1の補数を使うコンピュータと、2の補数を使うコンピュータがあります。
補数を使うと、引き算を足し算で表すことができます。
補数とは?
補数とは元の数にある数を足すと位が繰り上げになるような数のこと。
例えば3桁で表していた数字がちょうど4桁になる数。
例えば10進数3の補数は 3 + 7 でちょうど位が繰り上げで10になるので、7が補数です。
54の補数は、加えるとちょうど3桁になる、すなわち100になる数字なので、100 - 54 = 46 で46が補数となります。
この補数を使うことで、どんなことが便利になるのかを説明します。
補数を使うメリット
補数を使うメリットは、マイナスの記号を使わずに負数を表すことができることです。つまり負数を負数以外の方法で表現できる点です。
例えば、1024 - 130 = 894 の計算を加算で計算してみましょう。
-130を補数を使って表すと1000 - 130 = 870 です。
つまり、1024 - 130 を 1024 + 870 = 1894
よって一番左の桁を取り除いた、894が答えとなります。
このように、マイナスの符号を補数を用いることでプラスの表現をできます。
基数で負数の表現をするときには補数を用いて表現するので補数は覚えておきましょうです
1の補数と2の補数の違い
1の補数→0と1を反転するだけで求められます。
2の補数→1の補数に1を加えるだけで求められます。
1の補数は、2の補数を求めるときや、ビットを反転させる時に使い、2の補数は、2進数を使った引き算を足し算で計算できる様にするときに使います。
例えば、そのまま引くと答えが負数になる時は補数を使って足し算で計算することで求められます。
基数(n進数)の小数の表現方法
負数表現の次は、小数の表現方法を覚えていきましょう。
小数の表現は下記のような重み表を使うと分かりやすいです!
重み | 23=8 | 22=4 | 21=2 | 20=1 | 小数点 | 2-1=0.5 | 2-2=0.25 | 2-3=0.125 | 2-4=0.0625 |
2進数 | . |
(例題)10進数の5.625を2進数に変換しなさい。
重み表を使うと以下の表のようになります。
重み | 23=8 | 22=4 | 21=2 | 20=1 | 小数点 | 2-1=0.5 | 2-2=0.25 | 2-3=0.125 | 2-4=0.0625 |
2進数 | 1 | 1 | . | 1 | 1 |
となるので、答えは 0101.1010 となります。
基数(n進数)の加減法
基数(n進数)を使って加減法、すなわち足し算や引き算を行っていきましょう。
加減法は結構そのままです。
実際に例題を解いてみることで理解していきましょう。
(例題)2進数0111+0110は?

- 一番右の桁は 1 + 0 = 1
- 二の位 1 + 1 = 2 より繰り上げ
- 四の位 1 + 1 +繰り上げの1 = 1 と繰り上げの1
- 八の位 繰り上げの 1 + 0 + 0 = 1
よって答えは1101。
検算も行いましょう。
確認として2進数→10進数→2進数に変換して確かめると
0111→23+22+21=13
0110→23+22=12
13 + 12 = 25 → 24 + 23 + 21 → 1101
あってますね。
基数(n進数)の掛け算・割り算について
基数(n進数)の掛け算と割り算を行ってみましょう。ポイントは以下です。
- 掛け算→左に桁をずらすだけ!
- 割り算→右に桁をずらすだけ!
桁をずらすことを「シフトする」とも言います。
シフトには論理シフトと算術シフトの2種類があって大抵問題文では「論理シフトした時」や
「算術シフトしなさい」と書かれてありますので、違いをしっかり覚えておきましょう。
論理シフトと算術シフトの違い
◎論理シフト
・正数の時だけ使える!
・掛け算のときは左シフト、割り算の時は右シフトさせる!
・あふれたビットは捨て、空いたビットには0を入れる!
◎算術シフト
・負数の時も使える!
・符号に注意してシフトさせる必要がある!
・左シフトの時は変わらず空いたビットには0を入れる!
・右シフトの時符号ビットはずらさず、空いたビットには符号と同じ数字を入れる!
(例題)2進数の正の整数を16倍するには左に何ビットシフトすればいいでしょうか?
16倍→24倍 なので4bitシフトさせる!
(例題)10進数の10を1ビット論理左シフトしなさい。ただし2進数で計算する時は8ビットの条件付き。答えは10進数で答えなさい。(オーバーフローした桁は切り捨てられる)

(例題)-20を2ビット左に算術シフトしなさい。ただし2進数で計算する時は8ビットの条件付き。答えは10進数で答えなさい。(オーバーフローした桁は切り捨てられる)

まとめ
今回は2進数などの基数を使って負数を表す方法についてまとめました!
基本情報技術者試験を合格したい方は2の補数はこれからも頻繁に出題されているので、しっかり抑えていきましょう。
- 負数を表す時は2の補数を使う!
- 2の補数を使うと引き算を足し算で表すことができる!
- 足し算はそのまま、引き算は負数になりそうなら補数を使う!
- 掛け算・割り算は、論理シフトと算術シフトを使う!