C#/C# 기본

[C#] 연산자

로파이 2021. 10. 2. 16:25

C#에서 쓰이는 연산자의 종류

  • 증가/감소 연산자 : ++, --
  • 산술 연산자 : +,-,/,*
  • 비트 시프트 : <<, >>
  • 관계 연산자 : <, >, <=, >=, !=, ==
  • 비트 논리 연산자 : &, ^, |
  • 논리 연산자 : &&, ||
  • 할당 연산자 : =, *=, -=, *=, /=, >>=, <<=, &=, |=, ^=

 

C#에서 쓰이는 추가 연산자

null 조건부 연산자

?.  / ?[]

Nullable 변수에 대해 null이 아닐 때만 값을 반환하고 null일 경우 null을 반환

[]의 경우 배열과 같은 인덱스 접근이 가능한 개체에 쓰인다.

 

null 병합 연산자

var value = lhs ?? rhs

value에는 왼쪽 피연산자 lhs가 null이 아닐 경우 lhs의 값이 대입되고 아니라면 오른쪽 피연산자 rhs값이 대입된다. 

 

namespace HelloWorld
{
    class Foo
    {
        public int member;
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            ArrayList list = null;
            list?.Add("야구"); // Add는 호출되지 않는다.
            list?.Add("축구");

            WriteLine($"Count : {list?.Count}"); // 아무것도 출력되지 않는다.
            WriteLine($"{list?[0]}");
            WriteLine($"{list?[1]}");

            list = new ArrayList();
            list?.Add("야구"); 
            list?.Add("축구");

            WriteLine($"Count : {list?.Count}"); // 2
            WriteLine($"{list?[0]}"); // 야구
            WriteLine($"{list?[1]}"); // 축구

            // null 병합 연산자
            // 왼쪽 피연산자가 null인지 평가한다.
            // 평가 결과가 null이 아닌 것으로 나타나면 왼쪽 피연산자를 그대로 반환
            // 왼쪽 피연산자가 null이라면 오른쪽 피연산자를 반환한다.

            int? num = null;
            Console.WriteLine($"{num ?? 0}");

            Read();
        }
    }
}

연산자의 우선순위

1. 증가/감소 연산자 및 null 조건부 후위 ++/-- 연산자
2. 증가/감소 연산자 전위 ++/-- 연산자
3. 산술 연산자 * / %
4. 산술 연산자 + / -
5. 시프트 연산자 << >>
6. 관계 연산자 < > <= >= is as
7. 관계 연산자 == !=
8. 비트 논리 연산자 &
9. 비트 논리 연산자 ^
10. 비트 논리 연산자 |
11. 논리 연산자 &&
12. 논리 연산자 ||
13. null 병합 연산자 ??
14. 조건 연산자 ?:
15. 할당 연산자 = *= /= %= += -= <<= >>= &= ^= |=

 

 

간단한 예제

using System;
using System.Globalization;
using System.Collections;
using static System.Console;

namespace HelloWorld
{
    class Foo
    {
        public int member;
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            /* 연산자의 우선순위*/
            // 1. 증가/감소 연산자 및 null 조건부 후위 ++/-- 연산자
            // 2. 증가/감소 연산자 전위 ++/-- 연산자
            // 3. 산술 연산자 * / %
            // 4. 산술 연산자 + / -
            // 5. 시프트 연산자 << >>
            // 6. 관계 연산자 < > <= >= is as
            // 7. 관계 연산자 == !=
            // 8. 비트 논리 연산자 &
            // 9. 비트 논리 연산자 ^
            // 10. 비트 논리 연산자 |
            // 11. 논리 연산자 &&
            // 12. 논리 연산자 ||
            // 13. null 병합 연산자 ??
            // 14. 조건 연산자 ?:
            // 15. 할당 연산자 = *= /= %= += -= <<= >>= &= ^= |=


            int a = 1;
            int b = 2;
            // 연산자 우선순위에 따른 계산 예제

            int result1 = a << 4 + 2 * 1 + b >> 1;
            // 1) 4 + (2*1) + b == 8;
            // 2) a << 8 == 256;
            // 3) 256 >> 1 == 128;
            Console.WriteLine("{0:D}", result1); // 128

            int result2 = a << 4 + 4 & 0xff;
            // 1) 1 << 8 == 0x100;
            // 2) 0x100 & 0xff = 0;
            Console.WriteLine("{0:D}", result2); // 0

            int result3 = 6 + b << 2 >> 4;
            // 1) 6 + b == 8
            // 2) 8 << 2 == 32
            // 3) 32 >> 4 = 2
            Console.WriteLine("{0:D}", result3); // 2

            Read();
        }
    }
}

1)  int result1 = a << 4 + 2 * 1 + b >> 1;

  1. 4 + (2*1) + b == 8;
  2. a << 8 == 256;
  3. 256 >> 1 == 128;

 

2)  int result2 = a << 4 + 4 & 0xff;

  1. 1 << 8 == 0x100;
  2. 0x100 & 0xff = 0;

 

3)  int result3 = 6 + b << 2 >> 4;

  1. 6 + b == 8;
  2. 8 << 2 == 32;
  3. 32 >> 4 = 2;

'C# > C# 기본' 카테고리의 다른 글

[C#] 클래스  (0) 2021.10.06
[C#] 메서드  (0) 2021.10.05
[C#] 분기문  (0) 2021.10.02
[C#] 문자열  (0) 2021.10.02
[C#] 기본 자료형  (0) 2021.09.30