二進算盤の計算手順
(2)減算
二進一桁の減算は以下の四通りの基本パターンに分けられる。
0 - 0 = 0
1 - 0 = 1
0 - 1 =-1
1 - 1 = 0
このとき、0 - 1で -1となる。通常上位桁から値を借りて計算するが、この減算はあまり効果的ではない。そこで補数を用いて減算を加算として処理をする。
(被演算数) -(演算数)
=(被演算数) +(演算数の補数)
補数とは与えられた数値を、ある特定の基準値から引いて得られる数のこと。
ある進数が持つ基数について、(基数)、(基数 -1)の補数が存在する。
例えば二進数の場合、(2の補数)、(1の補数)が存在し、Nをn桁の二進数と考えた場合以下のように表される。
(2の補数)は 2^n -N
(1の補数)は(2^n -N) -1
1の補数を用いた減算は手順が増えてしまうため、ここでは2の補数を用いる。
二進数の2の補数は、与えられた数値の各桁を1から引き、その値の最下位桁に1を加え、必要ならば桁上げすることで得られる。
結果として便宜的に、各桁の0と1を反転し、1を加えた値でも求めることができる。
次に66と33の減算を例にする。(二進数八桁の数値演算とする)
66 =(01000010)
33 =(00100001)
減算結果が正の場合 例)66 - 33
ⅰ 33 =(00100001)の補数をとる
00100001 ‥‥ 33
↓ 0と1を反転し1を加える
11011110 ‥‥ 2^8 - 33
ⅱ 66 =(01000010)とⅰで求めた補数を加算する
01000010 ‥‥ 66
+) 11011110 ‥‥ 2^8 - 33
────────────
100100001 …… 2^8 +(66 - 33)
ⅲ ⅱの結果から2^8を除くため2^8で減算する
100100001 ‥‥ 2^8 +(66 - 33)
-) 100000000 ‥‥ 2^8
────────────
000100001 ‥‥ 66 - 33
↑最上位を取り除く
ⅳ ⅲの結果、答えは
+00100001 +33
減算結果が負の場合 例)33 - 66
ⅰ 66 =(01000010)の補数をとる
01000010 ‥‥ 66
↓
10111110 ‥‥ 2^8 - 66
ⅱ 33 =(00100001)とⅰで求めた補数を加算する
00100001 ‥‥ 33
+) 10111110 ‥‥ 2^8 - 66
───────────
11011111 …… 2^8 +(33 - 66)
ⅲ ⅱの結果に対してさらに2の補数をとる
11011111 ‥‥ 2^8 + (33 - 66)
00100001 ‥‥ 2^8 - {2^8+ (33 - 66)}
ⅳ ⅲの結果答えにマイナスを付ける
-00100001 -33
以上の例に即した珠の動きを次に示す
減算結果が正の場合
(イ)に 33 =(00100001)を置き各桁を反転後1を加える。
(イ)には 33 の補数が置かれる。
(ロ)に 66 =(01000010)を置き、1.の値と加算。
(イ)は加算結果と置き換わる。
(イ)に置かれている2.の加算結果から2^8を取り除く。
減算結果が負の場合
(イ)に 66 =(01000010)を置き、各桁を反転後1を加える。
(イ)には 66 の補数が置かれる。
(ロ)に 33 =(00100001)を置き、1.の値と加算。
(イ)は加算結果と置き換わる。
(イ)に置かれている2.の加算結果の各桁を反転後1を加える。
この答えにはマイナスの符号が付く。