변수 에대해 알게 되었으니 연산자에 대해서도 한번 알아보자.
연산자란 프로그래밍에서 값을 연산하거나 비교하는데 사용되는 기호 라고 볼 수있으며
수학에서의 연산자와 매우 비슷하다.
1. 산술연산자
// [] op [] // []괄호에 연산할 피연산자 , op 는 연산자를 의미
int num;
num = 1 + 1; // +(더하기)
num = 2 - 1; // -(빼기)
num = 3 * 3; // *(곱하기)
num = 4 / 3; // /(나누기) : 주의! 5 / 3 과 같이 int의 나눗셈은 소수점을 버린다.
num = 15 % 4; // %(나머지) : a - (a / b) * b 와 동일
2. 단항 연산자
// 하나의 항의 연산자
num = +num; // + 단항연산자(양수) : 값을 반환;
num = -num; // - 단항연산자(음수) : 값의 마이너스를 반환;
++num; // ++ 전위증가연산자 : 값을 1 증가
num++; // ++ 후위증가연산자 : 값을 1 증가
--num; // -- 전위감소연산자 : 값을 1 감소
num--; // -- 후위감소연산자 : 값을 1 감소
단항연산자는 별 차이를 못 느낄수 있는데 이는 코드와 출력을 보고 확인해보자.
// 전위연산자 : 값을 반환하기 전에 연산
num = 0;
Console.WriteLine(num); // output: 0
Console.WriteLine(++num); // output: 1 // 전위연산
Console.WriteLine(num); // output: 1
// 후위 연산 : 값을 먼저 주고 연산
num = 0;
Console.WriteLine(num); // output: 0
Console.WriteLine(num++); // output: 0 // 후위연산
Console.WriteLine(num); // output: 1
전위 후위는 값을 먼저 전달하고 연산을하냐 , 먼저 연산을하고 값을 주냐의 차이이다.
3. 복합 대입 연산자
// <대입 연산자>
num = 10; // = : 오른쪽의 값을 왼쪽 변수에 대입
// <복합 대입 연산자>
// 이진 연산자(op)의 경우
// x op= y 는 x = x op y 와 동일
num += 5; // num = num + 5;
num -= 1; // num = num - 1;
num *= 2; // num = num * 2;
//... 모든 산술연산자 는 가능하다.
3. 논리연산자
///논리 연산자
bool flag;
flag = !false; // !(Not) : 피연산자의 논리의 부정을 반환
flag = true && false; // &&(And) : 두 피연산자가 모두 true 일 경우 true
flag = true || false; // ||(Or) : 두 피연산자가 모두 false 일 경우 false
flag = true ^ false; // ^(Xor) : 두 피연산자가 다를 경우 true
여기선 하나 주의할 점이 있는데 || , && 연산자 는 빠른 계산을 위해 앞 에 논리식만 보고 뒤에 논리식을 확인 하지않을 수도있다 이점을 코드로 확인해보자.
num = 10;
flag = false && (++num > 5);
Console.WriteLine(num); // output : 10
&& 연산은 앞에 false 가 나왔기 때문에 무조건 false 상태가 되어서 뒤에 논리식을 확인하지 않아서 ++ 연산이 무시된다.
그래서 출력은 10 이 나오게된다.
마찬가지로 || 연산도 비슷하다.
num = 10;
flag = true || (++num > 5);
Console.WriteLine(num); // output : 10
여기서도 이미 true 값이기 때문에 뒤에 연산을 생략해버린다.
매우 주의 해서 사용해주자.
4. 비트연산자
// <단항 연산자>
int bit = ~0x25; // ~(비트 보수) : 데이터를 비트단위로 보수 연산 (보수 : 0->1, 1->0)
// <이진 연산자>
bit = 0x11 & 0x83; // &(And) : 데이터를 비트단위로 And 연산
// 0001 0001 & 1000 0011 = 0000 0001
bit = 0x11 | 0x83; // |(Or) : 데이터를 비트단위로 Or 연산
//0001 0001 | 1000 0011 = 1001 0011
bit = 0x11 ^ 0x83; // ^(Xor) : 데이터를 비트단위로 Xor 연산
//0001 0001 ^ 1000 0011 = 1001 0010
// <비트 쉬프트 연산자>
bit = 0x20 << 2; // << : 왼쪽의 피연산자의 비트를 오른쪽 피연산자만큼 왼쪽으로 이동
bit = 0x20 >> 2; // >> : 왼쪽의 피연산자의 비트를 오른쪽 피연산자만큼 오른쪽으로 이동
밑에 주석으로 실제 계산하는 방법을 써두었다.
이 비트 연산자는 잘 사용하지않을 것 같지만
<< . >> 연산은 매우 빠르기 때문에 곱하기나 나누기 대신 사용하기도한다.
<< 1 이 곱하기 2 를 뜻하고 << 2 가 곱하기 4 를 뜻한다. 그이유는 비트 플래그가 하나씩 올라갈때마다 2 의 n제곱 으로 계산되기 때문이다 >> 연산은 당연히 나누기 2 N 제곱 이다.
또한 또 많이 사용되는 때가 있는데 여러가지 조건이 매우 많이 있을때 이러한 조건들을 체크하는 용도로 사용하기도한다.
이것은 이후 한번더 자세히 알아보자.
마지막으론 이 연산자들의 우선순위에 대해알아보자.
5. 우선순위
MSDN 에서 가져온거라 더 많은 연산자가 있지만 필요한거만 살짝 확인만 해두자.
연산자 | 범주 또는 이름 |
x.y, f(x), a[i], x?.y, x?[y], x++, x--, x!, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x-y> | 기본 |
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true 및 false | 단항 |
x.y | 범위 |
switch , with | switch 및 with 식 |
x * y, x / y, x % y | 곱하기 |
x + y, x – y | 더하기 |
x << y, x >> y | Shift |
x < y, x > y, x <= y, x >= y, is, as | 관계형 및 형식 테스트 |
x == y, x != y | 같음 |
x & y | 부울 논리 AND 또는 비트 논리 AND |
x ^ y | 부울 논리 XOR 또는 비트 논리 XOR |
x | y | OR 또는 비트 논리 OR |
x && y | 조건부 AND |
x || Y | 조건부 OR |
X?? y | Null 병합 연산자 |
C? t : f | 조건 연산자 |
x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x ?? = y, => | 할당 및 람다 선언 |
참고자료
https://github.com/dMinsz/Csharp_Basic/blob/master/3.Operator/Program.cs
'프로그래밍언어 > 누구나 배워보는 C#' 카테고리의 다른 글
[C#] 3. 형 변환 (TypeCast) (0) | 2023.04.16 |
---|---|
[C#] 2. 변수와 타입 (0) | 2023.04.16 |
[C#] 1. C#의 주석과 몇 까지 알아두어야 할 것들 (0) | 2023.04.07 |
0. 준비하기 / 비주얼 스튜디오 2022 설치법 (0) | 2023.04.06 |