PHPでウェブの世界と繋がろう!
menu
ホーム > PHPの文法 > 4 演算子 > 4-2 演算子の優先順位と結合性

4-2 演算子の優先順位と結合性

Pocket

- 1 分ノート ! -

  • 演算子には評価の優先順位がある
  • ( ) 括弧を使用して計算の優先順位を変更
  • ( ) 括弧入れ子にして使用できる
    その場合内側の ( )括弧 内から計算される
  • 優先順位が同じ場合は結合性によって評価順が決まる
  • 結合性は左右どちらから計算するかの決まり
  • 結合性は優先順位であり演算子によってleft 或いは rightと決まっている

優先順位について
POINT
  • 演算子には評価の優先順位がある

 演算子には評価の優先順位があります。式の中に複数の演算子が登場した場合、優先順位に従って評価されます。例えば「*(乗算)」は「+(加算)」より優先されます。

7 + 5 * 8;

結果は

47

となります。

5 * 8 の「*(乗算)」を先に行ってから、7 + 40 の「+(加算)」を行います。

特定部分の計算を優先させたい場合
POINT

  • ( ) 括弧を使用して計算の優先順位を変更
  • ( ) 括弧入れ子にして使用できる
    その場合内側の ( )括弧 内から計算される

 強制的に特定部分の計算を優先させる場合は「()括弧」を使用します。「()括弧」内の計算が優先されて評価されます。

$i = (7 + 5) * 8;
echo $i;

結果は

96

となります。

7 + 5 の「+(加算)」が先に計算され、次に、12 * 8 の「*(乗算)」が計算されます。

()括弧」を入れ子にした場合、内側の「()括弧」内から計算されます。

((4 + 6) * 4) / 4

結果は

10

となります。

優先順位が同じ場合
POINT

  • 優先順位が同じ場合は結合性によって評価順が決まる
  • 結合性は左右どちらから計算するかの決まり
  • 結合性は優先順位であり演算子によってleft 或いは rightと決まっている

 同じ優先順位の演算子が式に複数使用された場合、その演算子の結合性によって評価する順番が 決まります。

演算子は、右(right)から計算するのか、あるいは左(left)から計算するのか、がそれぞれ決まっています。それが演算子の結合性です

右 から評価するのか 左 から評価するのかによって結果が異なります

4 / 4 * 4;

左から評価した場合
[ 4 ]

右から評価した場合
[ 0.25 ]

乗算と除算の結合性はleftなので左から評価されます。

従って、

結果は

4

となります。

以下は両方同じ意です。

4 / 4 * 4 / 4
((4 / 4) * 4) / 4

下の式は「括弧()」を使用して明示的に左から計算するようになっていますが、
乗算と除算の結合性は左(left)なので同じ意になります。

結果は

1

となります。

優先順位と結合性の表
優先順位 結合時の評価 演算子
19 結合しない new
18 left [
17 結合しない ++
  結合しない
  right ~
  right (int) (float) (string) (array) (object) (bool)
  right @
  結合しない instanceof
  right !
16 left *
/
%
15 left +

.
14 left <<
>>
13 結合しない <
<=
>
>=
<>
12 結合しない ==
!=
===
!==
11 left &
10 left ^
9 left |
8 left &&
7 left ||
6 left ? :
5 right =
+=
-=
*=
/=
.=
%=
&=
|=
^=
<<=
>>=
=>
4 left and
3 left xor
2 left or
1 left ,

分かりやすい式の記述
POINT

  • 「*(乗算)」と「/(除算)」は「+(加算)」と「-(減算)」より優先させる
  • それ以外は ( ) 括弧 を使用する

サンプルコード

– サンプル Click Here ! –

<h3>乗算 優先順位</h3>
<?php
$i = 7 + 5 * 8;
echo $i;
?>

<h3>()括弧による優先順位の変更</h3>
<?php
$i = (7 + 5) * 8;
echo $i;
?>
<br/><br/>

<h3>乗算 除算 結合性と()括弧による優先順位の変更</h3>
<?php
$i = 4 / 4 * 4;
echo $i;
echo '<br/>';
$i = (4 / 4) * 4;
echo $i;
?>

<h3>乗算 除算 結合性と()括弧による優先順位の変更</h3>
<?php
$i = 4 / 4 * 4 / 4;
echo $i;
echo '<br/>';
$i = ((4 / 4) * 4) / 4;
echo $i;
?>

<h3>乗算 除算 結合性と()括弧による優先順位の変更</h3>
<?php
$i = 1 / 2 * 3 / 4 * 5;
echo $i;
echo '<br/>';
$i = (((1 / 2) * 3) / 4) * 5;
echo $i;
?>
実行結果
乗算 優先順位
47

()括弧による優先順位の変更
96

乗算 除算 結合性と()括弧による優先順位の変更

4
4

乗算 除算 結合性と()括弧による優先順位の変更
1
1

乗算 除算 結合性と()括弧による優先順位の変更
1.875
1.875

– サンプル Click Here ! –


タグ(=記事関連ワード)

日付

投稿日:2011年10月27日
最終更新日:2014年02月12日

関連記事

配列関数サンプル

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

http://www.tryphp.net/phpref-operatorsprecedence/trackback/