問題
負数を2の補数で表すとき、8ビットの2進整数 n に対し -n を求める式はどれか。ここで、+ は加算を表し、ORはビットごとの論理和、XORはビットごとの排他的論理和を表す。
ア (n OR 10000000) + 00000001
イ (n OR 11111110) + 11111111
ウ (n XOR 10000000) + 11111111
エ (n XOR 11111111) + 00000001
解答 エ
2の補数
負の数を表すには、2の補数で表現します。2の補数を行うには、以下の手順になります。
①まず、ある数値Aに対して、Aの全てのビットを反転させる。
例)A=00001011(10進数ではA=11)であったなら、A=11110100とする。
②反転させたAに対して、1を加える。
例)反転させたA=11110100に1を加える。A=11110100 + 1 = 11110101
上の例)では、A=11110101(10進数ではA=-11)が2の補数になり、最初のA=00001011(10進数ではA=11)の負の数となります。
ある数nに対する2の補数(-n)を行う過程を論理式で表すと、以下になります。
①②nと11111111の論理和(XOR)を求めて、1を加える。
A = (n XOR 11111111) + 00000001