二進算盤の計算手順

(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を加える。
  この答えにはマイナスの符号が付く。