ゼロイチです!
これまで進数について概念を説明してきましたが、今回は勉強した知識を活用してみましょう!
そう、四則演算についてです。
コンピュータ内部での四則演算
コンピュータ内部では計算回路を簡素化するために、加減乗除は加算処理だけで計算されています。
メモ
・足し算(加算)
・引き算(減算)
引く数の補数を足す(補数の加算)
・掛け算(乗算)
足し算を繰り返す
・割り算(除算)
補数の加算を繰り返す
私たち人間が、それぞれの進数で足し算する場合は、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となる!
いかがだったでしょうか?!簡単だと思えたら嬉しいです!