【C#】組込み演算子を極めろ!!
今回は、C#の演算子について勉強していきましょう。
基本的にC言語やC++と変わりませんのでざっと勉強しちゃいましょう。
算術演算子
算術演算子とたいそうな名前がついてますが、ぶっちゃけ、足し算、引き算、掛け算、割り算のことです。
足し算:
x + y
引き算:
x - y
掛け算:
x * y
掛け算:
x / y
剰余:
x % y
x + y
引き算:
x - y
掛け算:
x * y
掛け算:
x / y
剰余:
x % y
ソースに落とし込むと下記のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System; class Program { static void Main() { var a = 1 + 2; // 3 足し算 var b = 2 - 1; // 1 引き算 var c = 3 * 4; // 12 掛け算 var d = 4 / 2; // 2 割り算 var e = 5 % 2; // 1 剰余 Console.WriteLine("足し算:{0} 引き算:{1} 掛け算:{2} 割り算:{3} 剰余:{4} ",a,b,c,d,e); } } |
インクリメント・デクリメント
インクリメントとデクリメント。
英語で考えると理解しやすいかと思います。
□インクリメント
increment:増量
⇒ x++
□デクリメント
decrement:減少
⇒ x–
increment:増量
⇒ x++
□デクリメント
decrement:減少
⇒ x–
インクリメントとデクリメントの記号を前に置くか後に置くかで意味が違ってきます。
まとめておきます。
前置インクリメント:
++x
⇒先にxに1を足す
前置デクリメント:
‐‐x
⇒先にxに1を引く
後置インクリメント:
x++
⇒後にxに1を足す
後置デクリメント:
x‐‐
⇒後にxに1を足す
++x
⇒先にxに1を足す
前置デクリメント:
‐‐x
⇒先にxに1を引く
後置インクリメント:
x++
⇒後にxに1を足す
後置デクリメント:
x‐‐
⇒後にxに1を足す
実際にソースに落とし込んで確認してみましょう。
2つの変数間で微妙な変化の違いを確認してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; class Program { static void Main() { var a1 = 10; var a2 = ++a1; // a1=a2=11 var b1 = 10; var b2 = --b1; // b1=b2=9 var c1 = 10; var c2 = c1++; // c1=11 c2=10 var d1 = 10; var d2 = d1--; // d1=9 d2=10 Console.WriteLine("a1:{0} a2:{1} b1:{2} b2:{3} c1:{4} c2:{5} d1:{6} d2:{7} ",a1,a2,b1,b2,c1,c2,d1,d2); } } |
シフト演算
シフト演算。ビット演算とかC言語とかで聞いたことないでしょうか?
つまり10進数で考えるのではなく、2進数で考えると理解できると思います。
左シフト:
int a = 51 << 2 ; // a = 204 ⇒2進数に直して考えてみよう。 0011 0011 << 2 = 1100 1100 右シフト: int b = 51 >> 1 ; // b = 25
⇒2進数に直して考えてみよう。
0011 0011 >> 1 = 0001 1001
int a = 51 << 2 ; // a = 204 ⇒2進数に直して考えてみよう。 0011 0011 << 2 = 1100 1100 右シフト: int b = 51 >> 1 ; // b = 25
⇒2進数に直して考えてみよう。
0011 0011 >> 1 = 0001 1001
ソースに落とし込んで数字を確認しておきましょう。
1 2 3 4 5 6 7 8 9 10 11 |
using System; class Program { static void Main() { int a = 51 << 2 ; // a = 204 int b = 51 >> 1 ; // b = 25 Console.WriteLine("a:{0} b:{1}",a,b); } } |
文字列連結
文字の連結は、非常に簡単です。C言語やってた人は、感動すると思います。
次のように書けます。
string s = “abc” + “def”; // s は “abcdef”
大丈夫だと思いますが、文字列を代入する変数は、string型を使います。
知らなかった人は、この機会に覚えておきましょう。
ソースに落としておきます。各自確認お願いします。
1 2 3 4 5 6 7 8 9 10 11 |
using System; class Program { static void Main() { string s = "abc" + "def"; // s は "abcdef" Console.WriteLine("s1:{0}",s); Console.WriteLine("s2:{0}","abc" + "def"); // ちなみにこれでもOK } } |
論理演算子
論理演算。これもビット演算に慣れてきた人なら簡単なところでしょう。
論理積
x & y
⇒byte a = 201 & 92; // a = 72
1100 1001 AND 0101 1100 = 0100 1000
論理和
x | y
⇒byte a = 201 | 92; // a = 221
1100 1001 OR 0101 1100 = 1101 1101
排他的論理和
x ^ y
⇒byte a = 201 ^ 92; // a = 149
1100 1001 XOR 0101 1100 = 1001 0101
論理否定
!x
⇒bool a = !true; // a = false
x & y
⇒byte a = 201 & 92; // a = 72
1100 1001 AND 0101 1100 = 0100 1000
論理和
x | y
⇒byte a = 201 | 92; // a = 221
1100 1001 OR 0101 1100 = 1101 1101
排他的論理和
x ^ y
⇒byte a = 201 ^ 92; // a = 149
1100 1001 XOR 0101 1100 = 1001 0101
論理否定
!x
⇒bool a = !true; // a = false
補数
~x
⇒int a = ~201; // a = -202
~(0000 0000 1100 1001) = 1111 1111 0011 0110
関係演算
関係演算。これは、皆さんよく知ってると思います。大小の比較の話です。
代表的なものは、以下の通りです。
x == y : xとyは等しい
x != y : xとyは異なる
x < y : xはyより少ない
x > y : xはyより大きい
x <= y : xはy以下である
x >= y : xはy以上である
x != y : xとyは異なる
x < y : xはyより少ない
x > y : xはyより大きい
x <= y : xはy以下である
x >= y : xはy以上である
今回は、長くなりました。お疲れさまでした。