基本情報技術者試験

2進数の足し算・引き算(補数)

ゼロイチです!

これまで進数について概念を説明してきましたが、今回は勉強した知識を活用してみましょう!

そう、四則演算についてです。

コンピュータ内部での四則演算

コンピュータ内部では計算回路を簡素化するために、加減乗除は加算処理だけで計算されています。

メモ

・足し算(加算)

・引き算(減算)
引く数の補数を足す(補数の加算)

・掛け算(乗算)
足し算を繰り返す

・割り算(除算)
補数の加算を繰り返す

私たち人間が、それぞれの進数で足し算する場合は、2つ考えられます。

①10進数に直して計算

②そのまま計算

②の場合は桁が上がる数値が10進数の場合と異なるので注意が必要です

補数

上のメモボックスにあった「補数」という考え方はとても重要です。

補数は言葉の通り「数を補う」という意味で、二つの歩数が存在します。

ポイント

n進数では、

その桁数での最大値を得るために補う数(n-1の補数)

次の桁に繰り上がるために補う数(nの補数)

例えば10進数の「123」に対して、9の補数、10の補数は以下のようになります。

1は、3桁の最大値が「999」なので9の補数は999 - 123 = 876

2は、次の桁は「1000」なので10の補数は1000 - 123 = 877

したがって2進数の場合は同様の考え方で「1の補数」「2の補数」があり、

その計算は簡単です。

1の補数は、元の数値の「1」「0」を反転させる
例)0011なら1の補数は「1」「0」を反転させればいいので1100

2の補数は、1の補数に1を足
例)1の補数が1100なら2の補数は1101

プラスとマイナスの表現方法

数値はビットで表されます。

2進数の場合、ビットは桁数になります。
(8ビットは2進数の8桁)

今回8ビットで数値を表すとしたら、2進数のプラス(正の値)とマイナス(負の値)は以下のようにて表します。

10進数の「3」の場合、

正の値・・・00000011

負の値・・・11111101

負の値の求め方は以下の通りです。

ポイント

①まずはプラスと考えて、対象となる10進数を2進数に変換しビット数で表現する
(8ビットなら8桁)

上の桁で足りない桁は0で埋める

③「1」「0」を反転させ、1の補数を求める

④1の補数に1を足し、2の補数を求める

プラスとマイナスの見分け方

マイナスを求める過程で「1」「0」を反転させていることから以下のことが言えますね!

最上位のビットが1であれば、マイナス(負の値)

最上位のビットが0であれば、0またはプラス(正の値)

実際に補数で引き算をしてみる!

それでは簡単ではありますが10進数の17 - 7 = 10を2進数で計算してみましょう!

前提として数値は8ビットで表し、先頭が1ならそれは負を意味する

10進数の17は、2進数だと00010001・・・(1)

10進数の7は、2進数だと00000111

「1の補数」は「1」「0」を反転させればいいので、11111000

「2の補数」は「1の補数」に1を足せばいいので、11111001・・・(2)

(1)と(2)より足すと、

100001010となるが8bitで数値は表す前提があるのではみ出した1は無視!

したがって残るのは00001010となり、答えは10となる!

いかがだったでしょうか?!簡単だと思えたら嬉しいです!

 

-基本情報技術者試験