平成19年 春期 ソフトウェア開発技術者 午前 問1

負数を2の補数で表現する32ビットの二つの整数データを加算したとき、あふれが生じるの必要十分条件はどれか。

 ア  ともに正で和が231以上、又はともに負で絶対値の和が231以上
 イ  ともに正で和が231以上、又はともに負で絶対値の和が231より大きい
 ウ  ともに正で和が231より大きい、又はともに負で絶対値の和が231以上
 エ  ともに正で和が231より大きい、又はともに負で絶対値の和が231より大きい


答え イ


解説
2の補数では最上位ビットは符号で0が正、1が負なので正の数の最大値は
 0111 1111 1111 1111 1111 1111 1111 1111
になります。
これは、232-1です。
次に負の数で絶対値が最も大きいのは
 1000 0000 0000 0000 0000 0000 0000 0000
になります。
これの、絶対値を2進数で表すには各けたの0・1を反転して、1を加えるので、0・1を反転させると
 0111 1111 1111 1111 1111 1111 1111 1111
になり、これに1を加えると
 1000 0000 0000 0000 0000 0000 0000 0000
になります。これは、232です。
したがって、正の数の場合は加算した結果が232-1を超えた場合、負の場合は加算した結果が232を超えた場合、けたあふれが発生します。


キーワード
・2の補数

キーワードの解説
  • 2の補数
    2の補数はコンピュータの世界で負の数を表現として使われる方法です。
    負の数を2の補数で表現する場合は、その数字の絶対値を2進数に変換し、その2進数の各けたの0・1を反転させ、それに1を加えることで求めることができます。
    負の数から、その絶対値を求めるのも手順は同じです。
    2の補数の場合、最上位ビットは符号になります。0ならば正の数、1ならば負の数です。
    2の補数を使用するメリットは、加算処理で正・負を考えずに計算きることです。
    例えば、4ビットで-6を2の補数で表現する場合、-6の絶対値6を2進数で表現すると
     0110
    になり、各けたの0と1を反転させると
     1001
    になります。これに1を加えると
     1010
    になり、これが2の補数での-6になります。
    次にこれを絶対値を求めます。
     1010
    の、各けたの0・1を反転すると
     0101
    になります。これに1を加えると
     0110
    になり、これは6になります。
    最後に、6と-6を加算します。
     6+(-6)=0110+1010=1 0000
    5ビット目は関係ないので、下位4ビットを見ると0になっています。

もっと、「2の補数」について調べてみよう。

戻る 一覧へ 次へ