三変数以上で複合代入演算子を利用したときの失敗

皆さんは複合代入演算子使ってますか〜〜〜〜!?

僕は良く使ってます!


複合代入演算子って何?って思う人もいると思いますが、

簡単に言ってしまうと

 a = a +  b

の様に a の値を利用して結果をaに代入するような演算を書くときにaって二回出てくるのですが、面倒くさいですよね〜。

そういった場合に下の様に書きなおす事ができるんです。

a += b

こんな感じで、便利だしaにbを足したのを代入するって言うのが分かりやすいなと思います。

で調子にのってガリガリかいていたのですが、

 a = a * b + c

という3変数を扱う式を複合代入演算子で表すとどういう結果になるのか、ふと疑問に思ったので試してみました(Javaで)。

public class CompositeAssignmentTest {
	static int a, b, c;

	public static void main(String args[]) {
		reset();
		a = a * b + c;// 元々計算したい式
		System.out.println("元々の式 : " + a);
		reset();
		a *= b + c; // 複合代入演算子でとりあえず書いてみた。
		System.out.println("複合代入演算子の式 : " + a);
	}

	public static void reset() {
		a = 2;
		b = 2;
		c = 2;
	}
}

で、実行した結果は次の様になりました。


結果をまとめてみると
普通の算数の演算子の関係で考えるとすると、足し算記号の優先度は掛け算記号より優先度が低いので

 (a*=b) + c

カッコの部分が先に計算されるのかなと思いましたが、

 a *= (b + c)

こういう判定になるみたいです。つまり、

 a = a * (b + c)

という判定になってしまうようで元々求めていた値とは違う値になるようです。

で色々と探してみた結果 複雑な演算子演算子の順位が見れるのですが、

複合代入演算子は総じて低い優先度になっているようです。

演算子以上で、この演算子を使う場合は注意を!(そんな事するのは私だけでしょうが・・・)