基本情報技術者試験受けます:(16)

forget-me-not 基本情報技術者試験

TOUの授業履修がしばらくお休みなので、始業前、お昼休みに基本情報技術者試験の勉強にはげんでいます。
午前問題の参考書ももう4周目です。
しかし、いちばん最初の2進数・算術シフト系の問題が手ごわいです。

補数表現とは?

こちらの記事で詳しく説明されています。(ITを分かりやすく解説「2の補数を分かりやすく解説」)

「補数」とは「「補う数」という意味で、「基数の補数」と「減基数の補数」という2種類の補数が存在します。」のことです。

基数の補数とは、ある数に足すと桁上がりをする数字のことを指します。

10進数の場合、「桁上がりする」とは、0から9が10、11から99が100になるということです。

以上のことより、10進数の場合、7に3を足すと10になります。
そこで、「3」は「7」に対する「10の補数」ということができます。

2進数の場合、11に1を足すと100になります。「1」は「11」に対する「2の補数」ということになります。

(「減基数の補数」については省略します。)

2の補数表現とは?

2進数の場合、「2の補数表現」を使いマイナス(負)の数値を表します。
10進数の場合、マイナス5は「-5」と表します。
2進数の場合、「-」のような記号はなく、「0」と「1」しかありません。「2の補数」は0と1だけでマイナスを表すための方法でもあります。

と、ここまでけっこうていねいに調べていたのですが、完全に試験対策シフトします。(ここまで2時間くらいかけてこの文章を書いています💦)

2進数の最上位桁が「1」の場合はマイナスとなる。
この場合、そのままでは絶対値が分からないため、計算することができない。
そのため絶対値を求める必要がある。

絶対値の求め方は、次の通りです。
①ビットを反転
②①に1を足す

実例:2012(平成24年) 秋 問1

8ビットの2進数11010000を右に2ビット算術シフトしたものを、00010100から減じた値はどれか。ここで、負の数は2の補数表現によるものとする。

ア 00001000  イ 00011111  ウ 00100000  エ 11100000

(問題文と選択肢は「出るとこだけ!基本情報技術者テキスト&問題集2021年版」より)

「8ビットの2進数11010000を右に2ビット算術シフトしたもの」は、11110100です。右にシフトするため、左(上位桁)が空欄となります。その空欄は「1」で埋めます。
11010000の最上位桁が「1」、つまりマイナス符号がついています。そのため、符号が変わらないようにするために「1」で埋めます。
もし最上位桁が「0」であれば「0」で埋めます。

00010100から11110100を引き算した結果がこの問題の解答です。

11110100はマイナスの符号がついています。
そこでビットを反転、1を足し、絶対値を求めます。
その結果は00001100となります。

つまり、00010100 - (-00001100) となり、結果として00010100と00001100を足したものが解答となります。

コメント

タイトルとURLをコピーしました