第3章 演算子 / 第5回 模擬試験
PHPの演算子の優先順位と結合則に関する次の記述のうち、正しいものはどれか。
乗算`*`は加算`+`より優先順位が高く、先に計算される。
正解
すべての演算子は左から右へ評価される左結合である。
括弧`()`を使っても、演算の優先順位を変えることはできない。
優先順位が同じ演算子が並んだ場合、常にエラーになる。
解説
乗算`*`・除算`/`・剰余`%`は、加算`+`・減算`-`よりも優先順位が高く、式の中に混在していても先に計算されます(`2 + 3 * 4`は`2 + (3 * 4) = 14`になり、`(2 + 3) * 4 = 20`にはなりません)。
他の選択肢が誤りである理由は次の通りです。
・PHPの演算子の結合則は演算子ごとに異なります。多くの演算子は左結合(左から右)ですが、べき乗`**`や三項演算子、代入演算子などは右結合です。「すべて左結合」というのは誤りです。
・丸括弧`()`を使うと、演算子の優先順位に関わらず、括弧内を先に評価させることができます。「変えることはできない」というのは誤りです。
・優先順位が同じ演算子が並んでも、結合則に従って順番に評価されるだけでエラーにはなりません。
例:
```
echo 2 + 3 * 4; // 14(*が先)
echo (2 + 3) * 4; // 20(括弧で優先順位を変更)
echo 2 ** 3 ** 2; // 512(**は右結合: 2 ** (3 ** 2))
```
(参照: 独習PHP 第4版 第3章 演算子 3.7節 演算子の優先順位と結合則 p.118〜121)
関連する問題
- 次のコードの【 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; ```