프로그래밍 언어에서는 일반적인 수학 연산과 유사한 연산자들이 지원된다.
c#에서는 여러 연산자를 제공하며 기본 연산을 수행할 수 있다.
<이진 연산자>
//변수 생성
bool b = false;
int i = 0;
float f = 0.0f;
i = 1 + 2; // +(더하기)
i = 3 - 1; // -(빼기)
i = 4 * 2; // *(곱하기)
f = 5f / 3f; // /(나누기) : 주의! 5 / 3 과 같이 int의 나눗셈은 소수점을 버림
i = 13 % 3; // %(나머지)
<단항 연산자>
i = +i; // + 단항연산자(양수) : 값을 그대로 반환
i = -i; // - 단항연산자(음수) : 값의 마이너스를 변환, 2의 보수로 만든다.
++i; // ++ 전위증가연산자 : 값을 1 증가
i++; // ++ 후위증가연산자 : 값을 1 증가
--i; // -- 전위감소연산자 : 값을 1 감소
i--; // -- 후위감소연산자 : 값을 1 감소
<전위연산자와 후위연산자>
// 전위연산자 : 값을 반환하기 전에 연산
i = 0;
Console.WriteLine(i); // output : 0
Console.WriteLine(++i); // output : 1
Console.WriteLine(i); // output : 1
// 후위연산자 : 값을 반환한 후에 연산
i = 0;
Console.WriteLine(i); // output : 0
Console.WriteLine(i++); // output : 0
Console.WriteLine(i); // output : 1
<대입 연산자>
i = 10; // = : 오른쪽의 값을 왼쪽 변수에 대입
<복합 대입 연산자>
//이진 연산자(op)의 경우
// x op= y 는 x = x op y 와 동일
i += 5; // i = i + 5; 와 동일
<비교 연산자>
b = 3 > 1; // > : 왼쪽 피연산자가 더 클 경우 true
b = 3 < 1; // < : 왼쪽 피연산자가 더 작을 경우 true
b = 3 >= 1; // >= : 왼쪽 피연산자가 더 크거나 같은 경우 true
b = 3 <= 1; // <= : 왼쪽 피연산자가 더 작거나 같은 경우 true
b = 3 == 1; // == : 두 피연산자가 같은 경우 true
b = 3 != 1; // != : 두 피연산자가 다를 경우 true
<논리 연산자>
b = !false; // !(Not) : true →false, false→true
b = true && false; // &&(And) : 두 데이터 모두 true 일 경우 true
b = true || false; // ||(Or) : 둘 중 하나라도 true 일 경우 true
b = true ^ false; // ^(Xor) : 두 데이터가 다를 경우 true
<조건부 논리 연산자>
// 조건부 논리 And 연산자 &&
// 빠른 계산을 위해 false && x(논리자료형) 의 경우 어떠한 논리자료형이 있어도
// 결과는 항상 false이기 때문에 false && x 에서 x는 무시하게 됨
iValue = 10;
bValue = false && (++iValue > 5);
Console.WriteLine(iValue); // output : 10
// 조건부 논리 Or 연산자 ||
// 빠른 계산을 위해 true || x(논리자료형) 의 경우 어떠한 논리자료형이 있어도
// 결과는 항상 true이기 때문에 true || x 에서 x는 무시하게 됨
iValue = 10;
bValue = true || (++iValue > 5);
Console.WriteLine(iValue); // output : 10
*컴퓨터 친화적인 연산으로 다른 연산에 비해 속도가 빠르다.
<단항 연산자>
i = ~0x35; // ~(비트 보수) : 데이터를 비트단위로 보수 연산 (보수 : 0->1, 1->0)
<이진 연산자>
i = 0x11 & 0x83; // &(And) : 데이터를 비트단위로 And 연산
// 0001 0001
// 1000 0011 &는 겹치는 것만 연산
// 0000 0001
// output: 0x01 or 1
Console.WriteLine(i);
i = 0x11 | 0x83;
// 0001 0001
// 1000 0011 |는 하나만 있어도 연산
// 1001 0011
// output: 0x93 or 147
Console.WriteLine(i);// |(Or) : 데이터를 비트단위로 Or 연산
i = 0x11 ^ 0x83; // ^(Xor) : 데이터를 비트단위로 Xor 연산
<비트 쉬프트 연산자>
iValue = 0x20 << 2; // << : 데이터의 비트를 입력값 만큼 왼쪽으로 이동
iValue = 0x20 >> 2; // >> : 데이터의 비트를 입력값 만큼 오른쪽으로 이동
// 왼쪽으로 1만큼 이동했을 때 *2와 같다.
// 오른쪽으로 1만큼 이동했을 때 /2와 같다.
// 100/2 → 100*0.5 → 100>>1 같은 계산이지만 오른쪽으로 갈수록 훨씬 연산속도가 빠르다.
여러 연산자가 있는 식에서 우선 순위가 높은 연산자가 먼저 계산
<연산자 우선순위>
// 1. 기본 연산 : a[i], x++, x--
// 2. 단항 연산 : +x, -x, !x, ~x, ++x, --x, (Type)x
// 3. 곱하기 연산 : x * y, x / y, x % y
// 4. 더하기 연산 : x + y, x - y
// 5. 시프트 연산 : x << y, x >> y
// 6. 비교 연산 : x < y, x > y, x <= y, x >= y
// 7. 같음 연산 : x == y, x != y
// 8. 논리 AND 연산 : x & y, x && y
// 9. 논리 XOR 연산 : x ^ y
// 10. 논리 OR 연산 : x | y, x || y
// 11. 대입 연산 : x = y, x op= y