ガジェット通信 GetNews

見たことのないものを見に行こう

【選択式問題】2進数パズル2解答と解説☆言語不問

DATE:
  • ガジェット通信 GetNewsを≫

2進数パズル2

本問題は、仮想コードを計算した結果、生成される値を選択肢から選ぶという内容でした。

それでは以下、各問題とその解答を見ていきましょう。

問題のオープニング

あなたは、2進数の女神「バイナ=リー」の神殿にやって来ました。

この神殿では、女神の出す問題に正解すれば富を約束され、間違うと死を約束されます。

あなたは、歴戦のプログラマーとして、女神をギャフンと言わせなければなりません。

この神殿では、以下のような式が提示されます。数字は2進数の数値で、?の位置には演算子が入ります。

0001
?0011
?0111

最初に1段目と2段目を計算して、その結果と3段目を計算して……というように、上から順に計算していきます。最終的な計算結果として正しい値を、選択肢から選んで下さい。

// 仮想コードのルール
& … AND演算子(2つの値が共に1なら1、それ以外は0)
| … OR演算子(2つの値のどちらかが1なら1、それ以外は0)
^ … XOR演算子(2つの値が異なるなら1、それ以外は0)

問題1

// 問題
0001
|1000
|0010
|0100

// 選択肢
16
15
11

仮想コードの実行結果を順番に見ていきましょう。

0001
|1000
|0010
|0100

1001
|0010
|0100

1001
|0010
|0100

1011
|0100

1011
|0100

1111

10進数では「15」

OR演算「|」は、対応するビットのいずれかが1なら1になります。また、上記は全てOR演算なので、全ての行のビットのいずれかが1なら1になります。つまり、一見して『1111』になることが分かります。

そのため答えは、2番目の選択肢の『15』になります。

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード

// 問題
var p1 = parseInt(“0001”,2);
var p2 = parseInt(“1000”,2);
var p3 = parseInt(“0010”,2);
var p4 = parseInt(“0100”,2);
var calc = (((p1 | p2) | p3) | p4);
console.log(calc);

// 出力結果
15

問題2

// 問題
0001
|1000
&0101
|0010

// 選択肢
3
11
13

仮想コードの実行結果を順番に見ていきましょう。

0001
|1000
&0101
|0010

1001
&0101
|0010

1001
&0101
|0010

0001
|0010

0001
|0010

0011

10進数では「3」

AND演算「&」は、対応するビットのどちらもが1なら1になります。3行目にAND演算「&0101」があるために、2桁目と4桁目の数字は強制的に0になります。また、1~2行目の計算結果「1001」との計算のため、2桁目と3桁目の数字は強制的に0になります。結果的に、1桁目のみが1になります。

あとは、1問目と同じように計算していきます。

答えは、1番目の選択肢の『3』になります。

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード

// 問題
var p1 = parseInt(“0001”,2);
var p2 = parseInt(“1000”,2);
var p3 = parseInt(“0101”,2);
var p4 = parseInt(“0010”,2);
var calc = (((p1 | p2) & p3) | p4);
console.log(calc);

// 出力結果
3

問題3

// 問題
0001
^1000
&0101
|0110

// 選択肢
7
13
14

仮想コードの実行結果を順番に見ていきましょう。

0001
^1000
&0101
|0110

1001
&0101
|0110

1001
&0101
|0110

0001
|0110

0001
|0110

0111

10進数では「7」

XOR演算「^」は、対応するビットが一致しない場合に1になります。そのため、1~2行目の計算結果は「1001」になります。あとは、1問目、2問目と同じように計算していきます。

答えは、1番目の選択肢の『7』になります。

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード

// 問題
var p1 = parseInt(“0001”,2);
var p2 = parseInt(“1000”,2);
var p3 = parseInt(“0101”,2);
var p4 = parseInt(“0110”,2);
var calc = (((p1 ^ p2) & p3) | p4);
console.log(calc);

// 出力結果
7

CodeIQ運営事務局より

柳井さん、ありがとうございました!
現在、柳井さんの最新問題が出題中です。
ぜひ挑戦してみてくださいね!

カテゴリー : デジタル・IT タグ :
CodeIQ MAGAZINEの記事一覧をみる ▶
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。