【補数】基本情報技術者試験

【補数】基本情報技術者試験

プロセッサでは基本的に減算(引き算)ができないため、足し算で減算を行うことを目的として行う数値表現です。コンピュータではマイナス表現に2の補数を採用しています。

過去出題問題(平成20年秋午前問3)

2の補数で表された負数10101110の絶対値はどれか。

ア 01010000
イ 01010001
ウ 01010010
エ 01010011

解法

“10101110”がいったいいくつなのか計算します。キーワードのビットを反転して+1というのは背うの2進数をマイナス表現するときのやり方です。問題の数値がすでに補数表現されているわけですから、キーワードの手順を逆に行って正の数値に戻します。
まず”10101110″から1を引きます。= “10101101 “となります。
ビットを反転させると”10101101 “ → “01010010 “

答え ウ

過去出題問題(平成20年春午前問3)

」負数を2の補数で表すとき、すべてのビットが1であるnビットの2進数 “1111・・・・11″が表す数値または数式はどれか。

ア -(2 n-1 -1)
イ -1
ウ 0
エ 2n-1

解法

キーワードのビットを反転して +1 というのは正の2進数をマイナス表現するときのやり方ですので、この問題もキーワードの手順を逆に行って正の数値に戻します。
まず、”1111・・・・111″から1を引きます。= “111・・・11”
次にビットを反転”000・・・01 “となります。これは”1”です。
元の正の数値は1だったわけです。そしてこの符号がマイナスになるわけです。

答え イ

まとめ

コンピュータは引き算ができない!そこで補数

問題で負の数は補数で表現しているというのをよく見かけます。この補数とはいったい何なのでしょうか。
補数はコンピュータのある必要性から考えだされました。前提としてコンピュータは引き算ができないという条件があります。例えば5 – 3 を考えましょう。コンピュータの世界ではすべて2進数ですので5は101、3は11です。なんとか足し算だけで引き算ができないものかを考えました。
まず 5 – 3を 5 + (-3)と考えます。そして桁数はデータ表現で決まっていますので、ここで仮に4桁とすると3は0011となりますね。この時(-3)とはどういうデータかというと、3と足して0になれば(-3)なのです。つまり0011と足して0になるデータ。一見ありえなさそうですが、4桁しかないので桁をオーバーさせてしまう数値を見つけるのです。その値とは1101です。 0011 + 1101 = 10000 となって先頭の1は4桁しかないのでオーバーフローし、計算結果は残った0000になってしまうのです。すなわち1101というのは結果を0にしてしまうので、-3としてみなすことができます。そしてこれを補数と呼びます。

補数の求め方

補数の求め方はまず
①ビットの反転(これで計算結果はすべて1になります)
②次に1を足す。(この結果先頭が1で残りすべて0ビットの数値が出来上がります)
そしてこの戦闘の1はオーバーフローによって消えてしまいますので、結果は0となり、①②で求めた1101は-3を表していることになります。先ほどの5-3を考えたとき、(-3)は補数の求め方に従って1101

0101 + 1101 = 10010

となり、先頭の1はきえますので答えは0010 、すなわち5-3=2と求まったわけです。このように苦肉の策で補数が考えだされました。