算額(S4)・道場研究レポート
☆解答
(問1-1)
仮定よりA+A'=28−1,A*=A'+1だから、A*=28−A …@ 
これは区間[2+1,28−1]内の整数であり、「先頭ビットが1である8桁の2進数」で表される。
これより、B+A*=28+(B−A) …A  B+A*=28−(A−B) …B 

イ)A≦Bのとき 
A式より、B+A*の計算結果において、28の位(8桁の更に1つ上の位)を無視すれば、
B−Aの答が得られる。 
なお、0≦B−A≦27−1なので、28の位に意味のある数が入ることはなく、 
また、28の位を無視したB+A*は
「先頭ビットが0である8桁の2進数」で表される。→これは正の整数を意味する。

ロ)A>Bのとき 
B式より、B+A*はA−Bの補数となる。
0<A−B≦27-1なので、B+A*は区間[2+1,28−1]内の整数であり、
「先頭ビットが1である8桁の2進数」で表される。→これは負の整数を意味する。

(問1-2)
−B−Aの場合も同様に補数を用いて計算することができる。
すなわち、A,Bの補数をそれぞれA*,B*とすると、 
A*+B*=(28−A)+(28−B)=28+{28−(A+B)}=28+(A+B)* …C 
ここで(A+B)*はA+Bの補数。 
よって、
A*+B*の計算結果において28の位(8桁の更に1つ上の位)を無視すれば、A+Bの補数が求まる。 
但し、計算がオーバー・フローしないためには、A+B≦2−1でなければならない。

(問2) 
先頭ビットが1なので、A*は負の数に相当し、具体的には−Aを意味する。
ところで、@よりA=28−A*だから、AとA*とは相互に補数の関係にある。
よって、

の手順によりA*の補数Aを求め、これを2進数から10進数に変換して「マイナス」をつければよい。

(問3)
−NのNを10進数から2進数に変換して−Aとし、さらに
の手順によりAの補数A*を求めればよい。

(問4)
8桁の2進数は本来0〜28−1の範囲の整数を表現することができるが、
補数を用いて負の数をも含めて表現する方法を採る場合、次のようになる。
・8桁の2進数のうち区間[0,2−1]内のもの
                    →そのまま0または正の整数を表す。…0〜2−1の範囲の整数
・8桁の2進数のうち区間[2,28−1]内のもの
                    →絶対値の補数として負の整数を表す。…−2〜−1の範囲の整数 
   註)補数とそれに相当する負の数との関係は以下の通り。  
     27→−1,27+1→−2,…,27+k→−(k+1),…,28−2→−(27−1),28−1→−27

よって、8桁ならば−27〜27−1の範囲の整数を表す。

同様に、n桁ならば−2n−1〜2n―1−1の範囲の整数を表す。

算額(S4)の問題へもどる