二進算盤の計算手順
    (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を加える。
      この答えにはマイナスの符号が付く。
    
    
    
    
    kimurayoshikuni.com