연산자(Operators)

C#에선 산술 연산자, 증감 연산자, 조건 연산자, 관계 연산자, 논리 연산자 등 여러가지의 연산자를 제공합니다. 오늘은, 아래 표에 정리된 연산자들에 대해서 배워보도록 하겠습니다.

2021년에 작성한 글로, 현재 보강 중입니다.

C#에선 산술 연산자, 증감 연산자, 조건 연산자, 관계 연산자, 논리 연산자 등 여러가지의 연산자를 제공합니다. 오늘은, 아래 표에 정리된 연산자들에 대해서 배워보도록 하겠습니다.

분류 연산자 예
수식 연산자 +, -, *, /, % a = b + c;
증감 연산자 ++, — a++;
할당 연산자 =, +=, -=, *=, /=, %= a += b + c;
논리 연산자 &&, ||, ! a && b
관계 연산자 <, >, ==, !=, >=, <= a > b
비트 연산자 &, |, ^ a ^ b

수식 연산자 (+, -, *, /, %)

수식 연산자에는 덧셈, 뺄셈, 곱셈, 나눗셈, 그리고 나눗셈을 한 뒤의 나머지를 구하는 연산자들이 있습니다. 아래는 그 연산자들을 표로 정리한 것입니다.

분류 기능 예
+ 양쪽 피연산자를 서로 더함 a + b
– 왼쪽 피연산자에서 오른쪽 피연산자를 뺌 a – b
* 양쪽 피연산자를 서로 곱함 a * b
/ 왼쪽 피연산자를 오른쪽 피연산자로 나눔 a / b
% 왼쪽 피연산자를 오른쪽 피연산자로 나눈 뒤의 나머지를 구함 a % b

여기서, 피연산자란 연산의 대상을 말합니다. 예를 들어서, a + b라면 a와 b는 피연산자고 +는 연산자입니다.

아래는 수식 연산자를 사용하여 그 결과를 출력하는 예제입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            int a = 55, b = 6;
            Console.WriteLine(a + b);
            Console.WriteLine(a - b);
            Console.WriteLine(a * b);
            Console.WriteLine(a / b);
            Console.WriteLine(a % b);
        }
    }
}
61 // a + b, 55 + 6 = 61
49 // a - b, 55 - 6 = 49
330 // a * b, 55 * 6 = 330
9 // a / b, 55 / 6 = 9
1 // a %b, 55 % 6 = 1
계속하려면 아무 키나 누르십시오 . . .

예제를 보시면, 14 ~ 18줄에는 5개의 연산자가 등장합니다. 연산자를 만나 연산을 거치고 그 결과를 출력합니다.

증감 연산자(++, –)

증감 연산자에는 피연산자의 값을 1만큼 증가시키는 증가 연산자와, 1만큼 감소시키는 감소 연산자가 있습니다.

분류 기능 예
++ (전위 증가 연산자) 피연산자의 값을 1만큼 증가 ++a;
— (전위 감소 연산자) 피연산자의 값을 1만큼 감소 –a;
++ (후위 증가 연산자) 피연산자의 값을 1만큼 증가 a++;
— (후위 감소 연산자) 피연산자의 값을 1만큼 감소 a–;

아래는 증감 연산자를 사용하여 그 결과를 출력하는 예제입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            int a = 1;
            Console.WriteLine(++ a); // a의 값을 1 증가시키고, 문장을 실행 (a = 2)
            Console.WriteLine(a ++); // 문장을 실행 후, a의 값을 1 증가 (a = 3)
            Console.WriteLine(-- a); // a의 값을 1 감소시키고, 문장을 실행 (a = 2)
            Console.WriteLine(a --); // 문장을 실행 후, a의 값을 1 감소 (a = 1)
        }
    }
}
2
2
2
2
계속하려면 아무 키나 누르십시오 . . .

전위는 우선 피연산자의 값을 증가시키거나 감소하고 그 문장을 실행하며, 후위는 문장을 먼저 실행하고 그 뒤로 값을 증가시키거나 감소하는 차이점을 보입니다. 우선 14행의 전위 증가 연산자를 만나 a의 값을 1 증가시키고 문장을 실행하니 2라는 값이 출력되었습니다. 그 뒤에 15행에서 우선 a의 값 2를 출력시키고 a의 값을 1 증가시켜 3이 되었습니다. 16행에서는 전위 감소 연산자를 만나 a의 값을 1 감소시키고 문장을 실행하여 2라는 값이 출력되었습니다. 마지막, 17행에서는 후위 감소 연산자를 만나 문장을 먼저 실행하여 2라는 값을 먼저 출력하고 a의 값을 1 감소시킵니다.

관계 연산자(<, >, ==, !=, >=, <=)

관계 연산자는 두 피연산자의 관계를 알아보는 연산자인데, 크기를 비교하는 연산자, 두 피연산자의 값이 서로 같거나 다른지 확인하는 연산자가 있습니다. 아래는 관계 연산자를 표로 정리해 둔 것입니다.

분류 기능 예
< 오른쪽 피연산자가 왼쪽 피연산자보다 크면 참, 작으면 거짓 a < b
> 왼쪽 피연산자가 오른쪽 피연산자보다 크면 참, 작으면 거짓 a > b
== 왼쪽 피연산자가 오른쪽 피연산자와 같으면 참, 다르면 거짓 a == b
!= 왼쪽 피연산자가 오른쪽 피연산자와 다르면 참, 같으면 거짓 a != b
>= 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같으면 참, 작으면 거짓 a >= b
<= 오른쪽 피연산자가 왼쪽 피연산자보다 크거나 같으면 참, 작으면 거짓 a <= b

아래 예제는 관계 연산자를 사용하여 결과를 출력하는 예제입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            int a = 50, b = 60;
            Console.WriteLine(a < b); // 50 < 60, True
            Console.WriteLine(a > b); // 50 > 60, False
            Console.WriteLine(a == b); // 50 == 60, False
            Console.WriteLine(a != b); // 50 != 60, True
            Console.WriteLine(a >= b); // 50 >= 60, False
            Console.WriteLine(a <= b); // 50 <= 60, True
        }
    }
}
True
False
False
True
False
True
계속하려면 아무 키나 누르십시오 . . .

*관계 연산자의 결과는 반드시 참(True) 혹은 거짓(False)입니다.

할당 연산자(=, +=, -=, *=, /=, %=)

할당 연산자는 오른쪽 피연산자를 왼쪽 피연산자에 할당하는 기능을 합니다. 아래는 할당 연산자를 표로 정리해 둔 것입니다.

분류 기능 예
= 오른쪽 피연산자를 왼쪽 피연산자에 할당 a = b;
+= a += b는 a = a + b와 같음 a += b;
-= a -= b는 a = a – b와 같음 a -= b;
*= a *= b는 a = a * b와 같음 a *= b;
/= a /= b는 a = a / b와 같음 a /= b;
%= a %= b는 a = a % b와 같음 a %= b;

아래는 할당 연산자를 사용하여 그 값을 출력하는 예제입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            int a = 50,
            b = 60;
            a += b;
            Console.WriteLine(a);
            a -= b;
            Console.WriteLine(a);
            a *= b;
            Console.WriteLine(a);
            a /= b;
            Console.WriteLine(a);
            a %= b;
            Console.WriteLine(a);
        }
    }
}
110
50
3000
50
50
계속하려면 아무 키나 누르십시오 . . .

논리 연산자(&&, ||, !)

논리 연산자는 위에서 배운 관계 연산자 처럼 결과 값이 true 또는 false이 되는 연산자 입니다. 아래의 표들은 논리곱 연산자, 논리합 연산자, 부정 연산자의 진리표입니다.

A B A && B
참 참 참
참 거짓 거짓
거짓 참 거짓
거짓 거짓 거짓

논리곱(&&) 연산자의 진리표

논리곱 연산자의 특징은 A와 B 모두 참이여야 결과값으로 참을 반환합니다.

A B A || B
참 참 참
참 거짓 참
거짓 참 참
거짓 거짓 거짓

논리합(||) 연산자의 진리표

논리합 연산자의 특징은 A나 B 둘중 하나라도 참일 경우에 결과값으로 참을 반환합니다.

A !A
참 거짓
거짓 참

부정(!) 연산자의 진리표

부정 연산자의 특징은 A가 참일 경우에 거짓을, 거짓일 경우에는 참을 결과값으로 반환합니다.

아래는 논리 연산자를 사용하여 그 결과를 출력한 예제입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            int a = 50,
            b = 60;
            Console.WriteLine(a > 40 && b > 50);
            Console.WriteLine(a > 40 || b > 70);
            Console.WriteLine(!(a < b));
        }
    }
}
True
True
False
계속하려면 아무 키나 누르십시오 . . .

예제를 살펴보면, 14행에서 논리곱 연산자가 쓰였는데 a > 40은 참, b > 50도 참이므로 참을 결과값으로 반환합니다. 15행에서는 논리합 연산자가 쓰였으며 a > 40은 참, b > 70은 거짓이나 논리합 연산자는 하나라도 참일 경우에 참을 결과값으로 반환하므로 참이 출력됩니다. 16행에선 부정 연산자가 쓰였습니다. a < b는 원래 참이나 부정 연산자로 인해 결과를 부정하여 거짓을 결과값으로 반환하였습니다.

비트 연산자(&, |, ^)

비트 연산자는 말 그대로 비트를 다루는 연산자입니다. 아래의 표는 비트 연산자를 정리해 둔 것입니다.

분류 기능 예
& 두 피연산자의 대응되는 비트에 논리곱을 수행 a & b
| 두 피연산자의 대응되는 비트에 논리합을 수행 a | b
^ 두 피연산자의 대응되는 비트에 배타적 논리합을 수행 a ^ b

아래는 배타적 논리합(XOR, ^)의 진리표입니다. A와 B중 하나만 참일 경우에 결과값으로 참을 반환합니다.

A B A ^ B
참 참 거짓
참 거짓 참
거짓 참 참
거짓 거짓 거짓

* 1 바이트(Byte)는 8개의 비트(Bit)로 이루어집니다.

아래는 비트 연산자를 사용하여 그 결과를 출력하는 예제입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            int a = 5, b = 10;
            Console.WriteLine(a & b); // 상위 3바이트 생략, 00000101 & 00001010 = 00000000(0)
            Console.WriteLine(a | b); // 상위 3바이트 생략, 00000101 | 00001010 = 00001111(15)
            Console.WriteLine(a ^ b); // 상위 3바이트 생략, 00000101 ^ 00001010 = 00001111(15)
        }
    }
}
0
15
15
계속하려면 아무 키나 누르십시오 . . .

* Int형은 4바이트를 차지하고, 32비트로 구성됩니다.

  • #c#
  • #Operators

t.laboratory

직접 만들고 운영하는 앱·서버·서비스에서 겪은 문제와, 그 해결에 쓴 코드를 기록하는 기술 블로그입니다.

운영자 소개 · 앱

↑