算額(S4)・道場研究レポート |
☆解答 (問1-1) 仮定よりA+A'=28−1,A*=A'+1だから、A*=28−A …@ これは区間[27+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*は区間[27+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≦27−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,27−1]内のもの →そのまま0または正の整数を表す。…0〜27−1の範囲の整数 ・8桁の2進数のうち区間[27,28−1]内のもの →絶対値の補数として負の整数を表す。…−27〜−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の範囲の整数を表す。 |