さて、以下のコードを実行すると・・・、
#include <stdio.h>
int main()
{
int i;
i = 1 + 1;
printf("%d\n", i);
i = 1 +- 1;
printf("%d\n", i);
i = 1 +-+ 1;
printf("%d\n", i);
i = 1 +-+- 1;
printf("%d\n", i);
i = 1 + + + + + + 1;
printf("%d\n", i);
i = 1 - - - - - - 1;
printf("%d\n", i);
i = 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1;
printf("%d\n", i);
return 0;
}
以下の様な結果が表示されます^^;)
補足しておくと、
単項演算子の結合方向は右から、2項演算子の結合方向は左から。
そして、
優先順位は単項 > 2項
の為、
1 +- 1
⇒ 1 + (-1)
⇒ 1 - 1 = 0
1 +-+ 1
⇒ 1 + (-(+1))
⇒ 1 + (-1) = 0
1 +-+- 1
⇒ 1 +(-(+(-1)))
⇒ 1 + 1 = 2
1 + + + + + + 1
⇒ 1 + (+ (+ (+ (+ (+1)))))
⇒ 1 + 1 = 2
1 - - - - - - 1
⇒ 1 - (- (- (- (- (-1)))))
⇒ 1 - (-1) = 2
というワケです。(n‘∀‘)η
※ +だけ、-だけの演算は、++, --と認識されてしまうので、間にスペースを入れる 必要があります。
+-でAAソースコードを作って、遊べそうですね♪ ^^;)