単項演算子、マイナス演算子(負の単項演算)の忘れがちな使われ方。
というか知らなかったけど。
単項演算子(Unary operators)とは
単項マイナス演算子の前にそもそも単項演算子って何って感じなので調べてみました。
有名なのはインクリメント・デクリメント演算子。これも単項演算子の一つです。
インクリメント・デクリメント演算子は「n++」 とか「n–」と書いてnに1足したり引いたりしてくれるやつです。
5 + 1 とかの+は演算子と言って単項演算子ではありません。
例えばJavaで下記のように書いて使えます。
int n = 10;
n++; //単項演算子を使って1を足す
System.out.println(n); //nは11
変数と組み合わせて式を簡略化することができます。
単項マイナス演算子(Unary minus operator)について
本題の単項マイナス演算子(負の単項演算)についてです。
単項マイナス演算子は本題の通り、負の値を正の値に切り替えることができます。
実際にどのような処理をしているのかは知りませんがマイナスとマイナスかけたらプラスになるようなイメージです。
イメージ ) -5 * -1 = 5
マイナスをプラスにする計算を単項マイナス演算子を使って書くと下記のようになります。
// 変数 n を intで宣言し-10を代入
int n = -10;
n = -n; //単項マイナス演算子でマイナスからプラスに
System.out.println(n); // 10
-n で10になるとは単項マイナス演算子の不思議な力ですね。
プラスはどうなる?
ここで疑問なのは+を使うとどうなるのかということです。
// 変数 n を intで宣言し-10を代入
int n = -10;
n = +n; //単項演算子でマイナスからプラスに?
System.out.println(n); // どうなるでしょうか?
この場合、ずばりnは-10のままです。
ではこの場合はどうなるでしょうか。
// 変数 n を intで宣言し10を代入
int n = 10;
n = +n; //単項演算子でプラスからどうなる?
System.out.println(n); // どうなるでしょうか?
おそらくみなさんの予想通り、そうnは10のままです。
かけ算のイメージ通りの結果が得られました。
イメージ ) 5 * 1 = 5
イメージ ) -5 * 1 = -5
ただ文法的には問題ないのでプラスも一応使うことができます。