【補数】基本情報技術者試験
プロセッサでは基本的に減算(引き算)ができないため、足し算で減算を行うことを目的として行う数値表現です。コンピュータではマイナス表現に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と求まったわけです。このように苦肉の策で補数が考えだされました。
-
前の記事
【状態遷移】基本情報技術者試験 2022.06.28
-
次の記事
【デジタル署名】基本情報技術者試験 2022.07.06