상세 컨텐츠

본문 제목

[C#] 연산자

.NET/C#

by 클리엘 클리엘 2021. 1. 19. 12:58

본문

728x90

1. 산술 연산자

연산자 기능
+ 더하기
- 빼기
* 곱하기
/ 나누기
% 나머지
static void Main(string[] args)
{
	int i = 10;
	int j = 20;

	Console.WriteLine($"Result = {i + j}");

	Console.WriteLine($"Result = {i % j}");
}

연산자가 여러 개 사용될 때는 사칙연산의 연산자 우선순위가 적용되며 괄호가 사용되면 괄호 안의 연산처리가 가장 우선적으로 적용됩니다.

 

+연산자는 산술에서는 '덧셈'처리되지만 문자열에서는 문자열의 결합이 됩니다.

static void Main(string[] args)
{
	string s = "123" + "456";

	Console.WriteLine($"Result = {s}");
}

2. 증가/감소 연산자

연산자 기능
++ 피연산자의 값을 1증가
-- 피연산자의 값을 1감소
static void Main(string[] args)
{
	int i = 10;
	
	++i;

	Console.WriteLine($"Result = {i}");
}

중가/감소 연산자는 연산자의 위치에 따라 처리 순서가 달라짐에 주의해야 합니다.

static void Main(string[] args)
{
	int i = 10;

	Console.WriteLine($"Result = {i++}"); //결과 10
	Console.WriteLine($"Result = {++i}"); //결과 12
}

증가/감소 연산자가 피연산자 뒤에 있는 것을 '후위 연산'이라고 하며 해당 구문이 모두 처리되고 난 다음에 연산자 이루어 짐을 의미합니다. 반면 증가/감소 연산자가 앞에 있는 것을 '전위 연산'이라고 하며 연산이 있는 구문이 실행되기 전에 먼저 연산이 이루어집니다.


3. 관계 연산자

연산자 기능 (왼쪽피연산자 기준)
< 작다.
> 크다.
<= 작거나 같다.
>= 크거나 같다.
== 같다.
!= 같지 않다.

관계 연산자는 연산의 결과가 맞으면 true, 아니면 false를 반환합니다.

static void Main(string[] args)
{
	int i = 10;

	if (i < 11) {
		Console.WriteLine($"Result : i가 11보다 작다.");
	}
	else {
		Console.WriteLine($"Result : i가 11보다 크거나 같다.");	
	}
}

4. 논리 연산자

연산자 기능
&& 피연산자가 모두 참이면 true 아니면 false (논리곱)
|| 피연산자중 하나면 참이면 true 아니면 false (논리합)
! 피연산자가 true면 false, false면 true (부정)

 

static void Main(string[] args)
{
	int i = 10;

	if (i < 11 && i > 9) {
		Console.WriteLine ($"Result : i는 11보다 작고 9보다 큼");
	}
}

5. 삼항 연산자

 

삼항 연산자는 ?와 :2개의 연산자가 사용되며 가장 왼쪽 피연산자가 true인 경우 ? 다음의 결과를, false인 경우 : 다음과 결과를 반환합니다.

static void Main(string[] args)
{
	int i = 10;

	bool r = (i == 10 ? true : false); //i가 10인경우 true를 아닌경우 false를 반환

	Console.WriteLine($"Result : {r}");
}

6. null 조건부 연산자

연산자 기능
?. 객체가 null이면 null을 아니면 객체의 필드값 반환
?[] ?.연산자와 동일하나 필드가 배열인 경우 첨자사용
static void Main(string[] args)
{
	Car c = null;

	int? i = c?.Speed; //c가 null이면 null을 아니면 Speed필드값 반환

	Console.WriteLine($"Result : {(i == null ? "-" : i)}");
}

class Car
{
	public int Speed;
}

7. 비트 연산자

연산자 기능
<< 왼쪽으로 비트이동
>> 오른쪽으로 비트이동
& 비트 논리곱 연산
| 비트 논리합 연산
^ 비트 배타적 논리합 연산
~ 비트 보수연산

<<와 >>는 시프트 연산자라고 하며 피연산자의 비트를 이동시키는 기능을 수행합니다.

static void Main(string[] args)
{
	int i = 1;

	i = i << 1;

	Console.WriteLine($"{i}");
}

예제에서 i는 1 값으로 1바이트(8비트) 상태로 따지면 00000001 입니다. 이 상태에서 쉬프트 연산자로 비트를 왼쪽으로 1만큼 밀고 난 다음 빈자리를 0으로 채우면(음수는 1로 채움) '00000010'이 되고, 이를 10진수로 변환하면 2가 됩니다.

 

<<와 >>를 제외하고 나머지 4개는 모두 피연산자의 값을 비트단위로 연산하는 비트 논리 연산자입니다.

static void Main(string[] args)
{
	int i = 1;
	int j = 2;

	int r = i & j;
	Console.WriteLine($"Result : {r}");
}

예제에서는 i의 값을 1로 했고 j의 값을 2로 했습니다. 이 2개의 값을 비트로 표현하면 다음과 같습니다.

 

00000001

00000010

 

그리고 위 2개의 비트에 대해서 &연산을 수행했으므로 결과는

 

00000000

 

이 됩니다. &는 피연산자 모두 true(1) 여야만 true(1) 값을 가지는데 위 비트 모두 1(true) 값을 낼 수 있는 게 아무것도 없기 때문입니다. 따라서 결과는 0이 됩니다.


8. 할당 연산자

연산자 기능
= 피연산자에 값을 대입
+= 덧셈 후 대입
-= 감산 후 대입
*= 곱셈 후 대입
/= 나눗셈 후 대입
%= 논리곱 대입
|= 논리합 대입
^= 배타적 논리합 대입
<<= 왼쪽 시프트 대입
>>= 오른쪽 시프트 대입
static void Main(string[] args)
{
	int i = 1;
	int j = 2;

	i += j; //기존 i값에 j값을 더한 후 결과를 대입
	Console.WriteLine($"Result : {i}");
}

9. null 병합 연산자

연산자 기능
?? null이면 왼쪽 아니면 오른쪽 값 반환
static void Main(string[] args)
{
	int? i = null;
	int j = 2;

	int r = i ?? j; //i가 null이므로 j값 대입

	Console.WriteLine($"Result : {r}");
}

10. 연산자 우선순위

순위 연산자
1 후위 ++, 후위 --, ?., ?[]
2 전위 ++, 전위 --
3 *, /, %
4 +, -
5 <<, >>
6 <, >, <=, >=, is, as
7 ==, !=
8 &
9 ^
10 |
11 &&
12 ||
13 ??
14 ?:
15 =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=

 

728x90

'.NET > C#' 카테고리의 다른 글

[C#] 메서드  (0) 2021.01.22
[C#] 제어문  (0) 2021.01.21
[C#] 연산자  (0) 2021.01.19
[C#] 문자열 및 문자열출력 다루기  (0) 2021.01.18
[C#] 데이터  (0) 2021.01.15
[C#] CLR / CTS  (0) 2021.01.14

태그

관련글 더보기

댓글 영역