250x250
Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

minjea.dev의 코딩블로그

[c#] 여러가지 연산자 본문

코딩강좌/c#

[c#] 여러가지 연산자

minjea.dev 2022. 4. 6. 17:02
728x90

저번시간에 우리는 c#의 기본 연산자와 변수에 대하여 알아봤습니다. 오늘은 c#에서 사용이 가능한 여러가지 연산자에 대하여 알아볼 예정입니다.

오늘 알아볼 연산자들은, 수식연산자, 증감연산자, 할당연산자, 논리연산자, 관계연산자, 비트연산자, 시프트연산자, 총 7개입니다

1. 수식연산자

수식 연산자 작동 방식 예제
+ 우측 피연산자와 좌측 피연산자를 더함 1+1
- 우측 피연산자와 좌측 피연산자를 뺌 2-1
* 우측 피연산자와 좌측 피연산자를 곱함 4*4
/ 우측 피연산자와 좌측 피연산자를 나눔 8/2
% 우측 피연산자와 좌측 피연산자를 나누고 나머지를 반환 7%2


수식연산자는 우리가 잘 아는 사칙연산을 할수 있게 해주는 연산자입니다. 즉, 이 연산자를 이용하면, 더하기, 빼기, 곱하기, 나누기, 나머지 구하기 등을 쉽게 할수 있습니다.

using System;

Console.WriteLine(2+4); // 6
Console.WriteLine(4-2); // 2
Console.WriteLine(2*4); // 8
Console.WriteLine(4/2); // 2
Console.WriteLine(4%2); // 0


2. 증감연산자

증감 연산자 평가 방식 예제
++ 피연산자의 값을 1 증가 int n = 1;
n++;
-- 피연산자의 값을 1 감소 int n = 1;
n--;


증감연산자에는 피연산자의 값을 증가시키는 증가연산자와, 감소시키는데 사용하는 감소연산자가 존재합니다. 증가연산자는 ++를 사용하고, 반대로 값을 감소시키는 감소연산자는 --를 사용합니다.

증감연산자는 그 위치에 따라 전위와 후위로 나뉘게 되는데, 전위는 우선 피연산자의 값을 증감시키고 코드를 실행하며, 후위는 코드를 먼저 실행하고 그 이후에 피연산자의 값을 증감시킵니다. 따라서, 상황에 맞는 증감 연산자를 사용하시면 됩니다.

int a = 10;
Console.WriteLine(a++); // 10이 출력되고, 출력된 후 값이 11로 변경됨
Console.WriteLine(++a); // 코드 실행 전에 먼저 값을 증가시키기 때문에, 12가 출력됩니다


3. 할당연산자

연산자 평가 방식 예제
= 우측 피연산자를 좌측 피연산자에 할당 int a = 1;
+= 우측 피연산자의 값을 좌측 피연산자의 값에 더한 후 저장 a += 1;
-= 우측 피연산자의 값을 좌측 피연산자의 값에서 뺀 후 저장 a -= 1
*= 우측 피연산자의 값을 좌측 피연산자의 값에 곱한 후 저장 a *= 16
/= 우측 피연산자의 값을 좌측 피연산자의 값에 대하여 나누고 저장 a /= 2
%= 우측 피연산자의 값을 좌측 피연산자의 값에 대하여 나누고 남은 나머지 값을 저장 a %= 3


할당연산자란, 오른쪽 피연산자를 왼쪽 피연산자에 할당하는 역할을 하는 연산자입니다. c# 에서 지원하는 할당연산자에는, =, +=, -=, *=, /=, %= 등이 있습니다.

int a = 100;
a += 10; // 110
a -= 10; // 100
a *= 100; // 10000
a /= 10; // 1000
a %= 10; // 0

눈치가 빠르신 분들은 아셨겠지만, 이 연산자들은 a=a+10 처럼 수식 연산자를 이용하여 할수 있는 연산을 간단히 하는 역할을 합니다.


4. 논리연산자

논리 연산자 평가 방식 예제
&& 좌측 피연산자와 우측 피연산자가 둘다 참이면 참, 아니면 거짓 true&&true
|| 좌측 피연산자나 우측 피연산자의 값 중 하나가 참이면 참, 아니면 거짓 false||true
! 값이 참이면 거짓이 되고, 거짓이라면 참이 됨. (즉, 반대가 됨) !true

조건식을 여러개 나열할수도 있습니다. 이때 사용되는 것이 논리 연산자로써, &&(AND, 논리곱), ||(OR, 논리합), !:(NOT, 부정) 이 존재합니다.

Console.WriteLine(true&&true); // True
Console.WriteLine(false&&true); // False * (false 부분은 평가되지만, true 부분은 평가되지 않음)
Console.WriteLine(true||false); // True * (true 부분은 평가되지만, false 부분은 평가되지 않음)
Console.WriteLine(false||true); // True
Console.WriteLine(!true); // False
Console.WriteLine(!false); // True

위 예제에서 * 로 표시한 부분을 보시면, 제가 써둔 설명이 보이실 겁니다. 이것에 대하여 설명을 드리겠습니다.

일단 2번째 줄을 보시면, false&&true라고 코드가 작성되어있습니다. 이 줄에서 사용한 && 연산자는 좌측 피연산자와 우측 피연산자 모두 참이어야지만 true를 리턴하고, 하나 또는 전체가 거짓이면, false를 리턴합니다. 그런데, c# 에선, 2번째 줄에서 && 연산자를 계연산할때, 이미, 좌측 피연산자가 false이기 때문에, 우측 피연산자가 참이든 거짓이든, 어차피 결과는 거짓이 반환되기 때문에, false 부분만 계산을 하고, 거짓을 리턴합니다. 이를 우리는 단락 계산(혹은 단축 평가, short-circuit evaluation)되었다고 합니다. 따라서, 3번 줄도 이미 좌측 피연산자가 참이기 때문에 우측 피연산자는 연산하지도 않고 그냥 True를 리턴합니다.

 

5. 관계연산자

관계 연산자 평가 방식 예제
> 좌측 피연산자가 우측 피연산자보다 크면 참, 아니면 거짓 1>2
< 좌측 피연산자가 우측 피연산자보다 작으면 참, 아니면 거짓 1<2
>= 좌측 피연산자가 우측 피연산자보다 크면 참, 작거나 같으면 거짓 1>=2
<= 좌측 피연산자가 우측 피연산자보다 작으면 참, 크거나 같으면 거짓 1<=2
== 좌측 피연산자가 우측 피연산자와 같으면 참, 아니면 거짓 1==2
!= 좌측 피연산자가 우측 피연산자와 다르면 참, 아니면 거짓 1!==2
Console.WriteLine(2>3); // False
Console.WriteLine(2<3); // True
Console.WriteLine(2>=2); // True
Console.WriteLine(3<=3); // True
Console.WriteLine("바보" == "천재"); // False
Console.WriteLine("바보" != "천재"); // True


관계 연산자는 두 피연산자의 관계를 알아보는 연산자인데, 크기를 비교하는 연산자, 두 피연산자의 값이 서로 같거나 다른지 확인하거나, 그 크기를 비교하는 연산자입니다.

6. 비트연산자

비트 연산자 작동 방식 예제
& 두 피연산자에 대응되는 비트값에 논리곱을 수행 예제 없음.
| 두 피연산자에 대응되는 비트값에 논리합을 수행 예제 없음.
^ 두 피연산자에 대응되는 비트값에 배타적 논리합(XOR)을 수행 예제 없음.


7. 시프트연산자

시프트 연산자 작동 방식 예제
<< 좌측 피연산자를 좌측으로 우측 피연산자의 수만큼 시프트 38<<2
>> 좌측 피연산자를 우측으로 우측 피연산자의 수만큼 시프트 38>>2

시프트 연산자는 2진수 상태의 값을 좌/우로 비트를 밀어내는 연산자입니다. (사실 초보분들이 쓸 경우가 거의 없고, 저도 안씁니다.)

Console.WriteLine(38<<2); // 38을 좌측으로 2번 시프트 (결과: 152);
Console.WriteLine(38>>2); // 38을 좌측으로 2번 시프트 (결과: 9);

 

시프트연산자와 비트연산자는 제가 잘 알지 못하여 설명 작성을 하지 못하였습니다. (여기서 그 두개는 공부해보세요)

 

오늘은 이렇게 c#의 여러가지 연산자에 대하여 알아보았습니다. 그럼 내일은 조건문과 반복문에 대하여 공부해보도록 하겠습니다.

728x90

'코딩강좌 > c#' 카테고리의 다른 글

[c#] 클래스  (0) 2022.04.09
[c#] 반복문(break, continue, 그리고 goto문)  (1) 2022.04.08
[c#] 조건문  (0) 2022.04.07
[c#] 변수와 상수, 그리고 스택과 힙  (0) 2022.04.05
[c#] 기본 자료형  (3) 2022.04.04