基本情報技術者試験 新制度サンプル問題 科目B問6の解き方 | パソコン教室アイのブログ

パソコン教室アイのブログ

子どもから大人までプログラミング教えます。

 

基本情報技術者試験の

 

過去問道場を教える

 

授業をしているのですが

 

新制度サンプル問題

 

科目B問6の解き方が

 

オンラインだと教えにくい。

 

なので

 

ブログ形式で書いて

 

わかりやすく

 

教えれるように

 

したいと思います。

 

まず

 

科目B問6の

 

問題文ですが

 

問6

 

次のプログラム中の□に入れる

 

正しい答えを、

 

解答群の中から選べ。

 

関数revは8ビット型の

 

引数byteを受け取り、

 

ビットの並びを逆にした値を返す。

 

例えば、

 

関数revをrev(01001011)

 

として呼び出すと、

 

戻り値は

 

11010010となる。

 

なお、演算子^はビット単位の論理積、

 

演算子vはビット単位の論理和、

 

演算子>>は論理右シフト、

 

演算子<<は論理左シフトを表す。

 

例えば、value>>nは

 

valueの値をnビットだけ

 

右に論理シフトし、

 

value<<nは

 

valueの値をnビットだけ

 

左に論理シフトする。

 

[プログラム]

 

○8ビット型: rev(8ビット型:byte)

 

    8ビット型rbyte ← byte

   

    8ビット型r ← 00000000

 

    整数型: i

 

    for(iを1から8まで1ずつ増やす)

 

       □

 

 endfor

 

    return r

 

ア r ← (r <<1) v (rbyte ^ 00000001)

     rbyte ← rbyte >> 1

 

イ r ← (r<<7) v (rbyte ^ 00000001)

     rbyte ←rbyte >> 7

 

ウ r ← (rbyte << 1) v (rbyte >> 7)

     rbyte ← r

 

エ r ← (rbyte >>1) v (rbyte << 7)

     rbyte ← r

 

となっています。

 

では解いていきたいと

 

思います。

 

答えは

 

なのですが

 

の通りに

 

してみると

 

 

 

 

プログラムが

 

return rになってるので

 

この表を見てわかるように

 

黄色く塗りつぶしている

 

r=11010010が

 

緑で塗りつぶしている

 

rbyte=01001011の

 

逆になってることが

 

わかります。

 

なので答えは

 

です。

 

この問題の

 

重要なポイントは

 

図の中で

 

水色の線

 

表したように

 

rは

 

 r ← (r <<1) v (rbyte ^ 00000001)

 

された後に

 

次の繰り返し時に

 

左に1ビット

 

論理シフトされる

 

ということです。