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
ア 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を足したものが解答となります。
コメント