符号反転
単項マイナス演算子
整数リテラルや浮動小数点数リテラルは常に正の数を表していました。実はリテラルでは負数を直接表現することはできません。..
コンピュータは、数値が生の数なのか負の数なのかという符号を、最上位ビットによって管理しています。ビット列を直接操作することでも符号を変えることはできますが、最も簡単な方法は単項マイナス演算子(Unary minus operator)を使うことです。
- 項
単項マイナス演算子は - 記号を使いますが、項を 1 つしか受けとりません。減算演算子も - 記号を使いましたが、こちらは二項演算子なので 2 つの項を受け取っていました。コンパイラは、項の数によって単項マイナス演算子なのか減算演算子なのかを区別できます。
class Test { static void Main() { System.Console.WriteLine(-10); System.Console.WriteLine(-(-10)); } }
コード1では、整数リテラル 10 をマイナス単項演算子に与えています。この結果は、整数の符号を反転した -10 となります。
さらに、単項マイナス演算子で負数にした -10 という値を、さらに単項マイナス演算子に与えています。この結果は 10 であり、符号が反転していることが確認できます。このように、単項マイナス演算子は負数であることを表す記号はなく、符号を反転させるという演算なのです。
単項プラス演算子
単項マイナス演算子に対し、単項プラス演算子(Unary plus operator)も存在します。利用方法は単項マイナス演算子と同じで + 記号を項の前に配置する前置単項演算子となります。
+ 項
ただし、単項プラス演算子は符号を反転される効果はありません。符号を消す(正数にする)という効果もありません。この演算子は与えた項をそのまま返します。つまり、何もしません。
class Test { static void Main() { System.Console.WriteLine(+10); System.Console.WriteLine(+(-10)); } }
コード2は単項プラス演算子に整数リテラル 10 を与えていますが、この結果はそのまま 10 であることが確認できます。さらに、負数である -10 を渡した場合も、その結果は変わらず -10 のままです。
このように、単項プラス演算子は見た目と異なり負数を正数に変換するといった効果はありません。