科目B ビット演算の解き方について

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
マシュマロさん  
(No.1)
科目Bのビット演算の問題がどうしても苦手です。
出るとこだけ 基本情報技術者 の参考書で勉強しているのですが、解くのに大体15〜20程かかってしまいます。
そのため、模擬試験形式にすると時間が足りない事がかなりあります。

そこで質問なのですが、ビット列系の問題を解く際に皆さんが行っている時短のテクニックや、解き方のコツがあればぜひご教示頂きたいです。

よろしくお願いいたします。
2025.09.03 08:10
マンドリルさん 
(No.2)
結論からすると、行いたい処理に応じた適切な入力値を与えることかと思います。

問題の内容にもよりますが、新制度サンプルのB問6の場合、
https://www.fe-siken.com/kakomon/sample/b6.html

入力ビットの順序を入れ替えるのだから、入力側の最下位ビットの内容を出力側の最上位ビットにいれていきそうだということはわかります。逆に入力側の最上位ビットの内容を出力側の最下位ビットから入れていくこともできます。
自分のやり方ですが、まずは選択肢を見ずに、どのようにコーディングしていくかを考えます。

Cの場合だと、(ループ内のみ)
for (i=0; i < 8; i++) {
  r |= ( rbyte & 0x1 ) << (7-i); /* 最下位ビットから最上位ビットへ入れていく */
  rbyte >>= 1;
}
これにあうものはどれかを見ていきます。

選択肢のウとエは1行目の順序が異なるだけで同じ式であることから不適切と判断でき、選択肢アかイのどちらが正しいかを確認します。

イは毎回右7シフトしているので、2回目以降のループは0で評価されそうだと気づきますのでアが正解とわかりますが、最初に考えたCのコードと形式が異なっていますので再確認します。代入式を変形し、
r = ( rbyte & 0x1 ) | (r << 1);
のように、rを先に左シフトするようにすれば同値であると気づけます。

実際に具体的な値を入れてトレースで確かめることもできます。この問題の場合は、ビット移動を伴うもののため、動作が適切かどうかを判断できるように、0と1をまんべんなく含むような値(例えば、10010010など)を選択します。単純に00000000や11111111のような値だと確証が取れません。心配なら2,3パターン確認してもよいですが、全体の時間が足りないので、自分の場合は、「ア」にチェックして次の問題に進み、時間が余った後の見直しの時にトレースします。
2025.09.04 20:37

返信投稿用フォーム

※CBT試験では出題内容の公開が禁止されているため、直接的・間接的を問わず、出題内容や難易度を尋ねる質問は厳禁です。
※宣伝や迷惑行為を防止するため、当サイト、姉妹サイト、IPAサイト以外のURLを含む記事の投稿はできません。

投稿記事削除用フォーム

投稿番号:
パスワード:

その他のスレッド


Pagetop