第3章 演算子 / 第4回 模擬試験
PHPのビット演算子に関する次の記述のうち、正しいものはどれか。
`<<`は左シフト演算子で、ビットを左に指定回数シフトする(2進数で見ると値が倍増する)。
正解
`&`はビット演算子ではなく、文字列連結演算子である。
`|`(ビットOR)は、両方のビットが1の場合のみ1になる演算子である。
PHPにはビット演算子という概念は存在しない。
解説
`<<`(左シフト演算子)は、左辺の値を2進数として捉え、指定したビット数だけ左にずらす演算子です。1ビット左にシフトするごとに値はおおむね2倍になります(`$a << $b`は`$a * 2 ** $b`に相当します)。
他の選択肢が誤りである理由は次の通りです。
・`&`はビットAND演算子です。文字列連結演算子は`.`(ドット)です。
・`|`(ビットOR)は、対応するビットのどちらか一方でも1であれば1になる演算子です。「両方が1の場合のみ1」になるのはビットAND(`&`)の説明です。
・PHPには`&`(AND), `|`(OR), `^`(XOR), `~`(NOT), `<<`(左シフト), `>>`(右シフト)といったビット演算子が存在します。
例:
```
echo 1 << 3; // 8(1を2進数で3ビット左シフト → 2の3乗倍)
echo 5 & 3; // 1(ビットAND)
echo 5 | 2; // 7(ビットOR)
```
(参照: 独習PHP 第4版 第3章 演算子 3.5節 ビット演算子 p.112〜115)
関連する問題
- 次のコードの【 A 】に入れた場合に`true`が返される組み合わせとして正しいものはどれか。 ```php if (【 A 】) { print("true"); } else { print("false"); } 【1】"php" > "perl" 【2】0 != "0" 【3】5 - 6 + 1 【4】"false" 【5】0 + false 【6】"543a" < 56 【7】abs(-6) > 10 / 2 ```
- 次のコードの実行結果として正しいものはどれか。 ```php $a = 2 + 3 * 6; $b = $a % 7; $c = $b ** 2; print($c); ```
- PHPの論理演算子に関する次の記述のうち、正しいものはどれか。
- PHPの論理演算子に関する次の記述のうち、誤っているものはどれか。
- 次のコードの実行結果として正しいものはどれか。 ```php $a = 10; $b = 3; print $a / $b . " " . intdiv($a, $b) . " " . $a % $b; ```