今回は演算子についてです。
演算子は変数、リテラルと組み合わせて計算や比較などを行うことができます。
ちなみにリテラルはコードに直接書いた数字(10とか1.34とか)や文字のことです。
演算子のことをオペレーター(operator)と言います。
算術演算子(+ – * / %)
数値型の変数(int、doubleなど)や数値リテラル(10、3.14など)の計算を行います。
演算子 | 演算 | 例 |
---|---|---|
+ | 加算 | 2 + 3 ⇒ 5 |
– | 減算 | 5 – 4 ⇒ 1 マイナス符号にもなる(–x、–10) |
* | 乗算 | 2 * 3 ⇒ 6 |
/ | 除算 | 4 / 2 ⇒ 2 0で割ろうとするとエラーになるので注意。 |
% | 剰余 | 3 % 2 ⇒ 1 3を2で割った余り |
実際にコードを書く場合、リテラル同士の計算で使う場面は少なく、
変数とリテラルの計算、変数と変数の計算という組み合わせが多いです。
int x = 10;
int y = 20;
System.Console.WriteLine(x + y); //30
System.Console.WriteLine(x * y / 2); //100 三角形の面積
違う型同士の計算の場合、自動的にサイズの大きい方に型が変換されて計算が行われます。
double x = 10.0;
int y = 20;
System.Console.WriteLine(x + y); //30 double型になる
計算の優先順位
数学と同じで乗算( * )、除算( / )は加算( + )、減算( – )よりも先に計算されます。
System.Console.WriteLine(2 + 3 * 4); //14
乗算と除算どうし、加算と減算どうしの場合は、左側から計算されます。
System.Console.WriteLine(10 - 5 + 3); // 8
System.Console.WriteLine(4 / 2 * 10); // 20
数学と同じようにかっこ ( ) で囲むと優先順位を変えることができます。
System.Console.WriteLine(2 + 3 * 4); //14
System.Console.WriteLine((2 + 3) * 4); //20
式について
演算子は1つ以上のオペランドを持ちます。
急にでてきたオペランドの説明です。
オペランドとは計算や判定の対象になる変数やリテラルのことです。
算術演算子のところで出てきた「 x + y 」のxとyがオペランドです。
+演算子は2つのオペランドの合計を計算するということになります。
オペランドを1つしか必要としない演算子を単項演算子、
オペランドを2つ必要とする演算子を2項演算子と言います。
+演算子は2項演算子になります。
演算子とオペランドで構成された文を式といいます。
プログラム実行時に式の結果を演算することを評価といいます。
等値演算子(== !=)
左のオペランドと右のオペランドが等しいかどうかを確認します。
結果は論理型(trueかfalseのどちらか)になります。
左辺、右辺と書いていますが本当は左側のオペランド、右側のオペランドです。
急にでてきたオペランドはしっくりこないので左辺、右辺で説明しています。
演算子 | 意味 |
---|---|
== | 左辺と右辺が等しい場合にtrue |
!= | 左辺と右辺が等しくない場合にtrue |
System.Console.WriteLine(5 == 5); // true
System.Console.WriteLine(5 != 5); // false
数値型以外の等値
等値演算子は数値型以外にも使用できます。
文字列同士の場合、大文字・小文字が区別され判定されます。
また、両方がnullの場合はtrueになります。
string s1 = "あいう";
string s2 = "あいう";
System.Console.WriteLine(s1 == s2); //true
string s3 = "Abc";
string s4 = "abc";
System.Console.WriteLine(s3 == s4); //false
string s5 = null;
string s6 = null;
System.Console.WriteLine(s5 == s6); //true
文字列以外の参照型の場合、同じオブジェクトを参照している場合にtrueになります。
比較演算子(< <= > >=)
左辺と右辺の比較を行います。左辺、右辺ともに数値型(整数・浮動小数点)です。
結果は論理型(trueかfalseのどちらか)になります。
演算子 | 意味 |
---|---|
< | 左辺が右辺より小さい場合はtrue |
<= | 左辺が小さいか右辺と等しい場合にtrue |
> | 左辺が右辺より大きい場合はtrue |
>= | 左辺が右辺より大きいか等しい場合にtrue |
System.Console.WriteLine(5 < 5); // false
System.Console.WriteLine(5 <= 5); // true
System.Console.WriteLine(5 > 5); // false
System.Console.WriteLine(5 >= 5); // true
代入演算子(= += -= *= /=)
代入演算子は右辺の値を左辺に代入します。
演算子 | ||
---|---|---|
= | 右辺の値を左辺に代入する | x = 5; |
+= | 右辺を加算して左辺に代入する | x += 5; (x = x + 5;と同じです) |
-= | 右辺を減算して左辺に代入する | x -= 5; (x = x – 5;と同じです) |
*= | 右辺を乗算して左辺に代入する | x *= 5; (x = x * 5;と同じです) |
/= | 右辺を除算して左辺に代入する | x /= 5; (x = x / 5;と同じです) |
int a = 10;
System.Console.WriteLine(a += 5); // 15
a = 10;
System.Console.WriteLine(a -= 5); // 5
a = 10;
System.Console.WriteLine(a *= 5); // 50
a = 10;
System.Console.WriteLine(a /= 5); // 2
代入演算子(=)を使った式の結果は左辺に代入された値です。
= は等値演算子(==)と間違いやすいので注意が必要です。
int a = 1;
System.Console.WriteLine(a == 1); // true
System.Console.WriteLine(a = 1); // 1
論理演算子
論理型のオペランドを使用する場合と、
整数の数値型のオペランドを使用する場合(ビット演算とか呼ばれる)があります。
とりあえずブール論理演算子を覚えましょう。
ブール論理演算子(! ^ & | && ||)
論理型同士の論理演算を行います。
結果は論理型(trueまたはfalse)になります。
演算子 | |
---|---|
! | オペランドの否定(NOT) オペランドの前に付けて否定を表します(単項演算子) !true ⇒ false、!false ⇒ true |
^ | 論理排他的OR(XOR) 左辺がtrue、右辺がfalseの場合にtrue 左辺がfalse、右辺がtrueの場合にtrue |
& | 左辺と右辺がtrueの場合、trueになる(AND) 左辺がfalseの場合でも右辺を評価する |
&& | 左辺と右辺がtrueの場合、trueになる(AND) 左辺がfalseの場合、右辺は評価しない |
| | 左辺または右辺がtrueの場合、trueになる(OR) 左辺がtrueの場合でも右辺を評価する |
|| | 左辺または右辺がtrueの場合、trueになる(OR) 左辺がtrueの場合、右辺は評価しない |
どんなときに使うのか?
論理演算、なにやら難しい言葉ですが、主にif文の条件式で使用されます。
if文は式の結果の値(true、false)によって処理を分岐します。
たとえば、数値を10以上20以下と範囲指定をしたい場合、
比較演算子とブール論理演算子をつかいます。
int x = 15;
if(x >= 10 && x <= 20) {
//範囲内なので処理を行う
}
int y = 50;
if(y >= 10 && y <= 20){
//範囲外なのでここは通らない
}
xの場合、&&の左辺がx >= 10 がtrue、右辺がx <= 20がtrueになり、true && trueなので条件を満たします。
yの場合、&&の左辺がy >= 10 がtrue、右辺がy <= 20がfalseになり、true && false なので条件は不成立になります。
論理演算の優先順位
評価の優先順位はこのようになります。
高い ⇒⇒⇒ 低い
! ⇒ & ⇒ ^ ⇒ | ⇒ && ⇒ ||
かっこ ( ) を使うと優先順を変えることができます。
C# 記事まとめページに戻る(他のサンプルコードもこちら)
コメント