HOME»基本情報技術者試験掲示板»科目B ビット演算の解き方について
投稿する
科目B ビット演算の解き方について [6050]
マシュマロさん(No.1)
科目Bのビット演算の問題がどうしても苦手です。
出るとこだけ 基本情報技術者 の参考書で勉強しているのですが、解くのに大体15〜20程かかってしまいます。
そのため、模擬試験形式にすると時間が足りない事がかなりあります。
そこで質問なのですが、ビット列系の問題を解く際に皆さんが行っている時短のテクニックや、解き方のコツがあればぜひご教示頂きたいです。
よろしくお願いいたします。
出るとこだけ 基本情報技術者 の参考書で勉強しているのですが、解くのに大体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パターン確認してもよいですが、全体の時間が足りないので、自分の場合は、「ア」にチェックして次の問題に進み、時間が余った後の見直しの時にトレースします。
問題の内容にもよりますが、新制度サンプルの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
