[C#이 보이는 그림책] 2. 연산자

ssu_hyun·2022년 4월 2일
0

C#

목록 보기
3/22

Key point

  • 연산자
    • 수치 연산자
    • 비교 연산자
    • 논리 연산자
  • 연산의 종류에 따라 형을 구분하여 사용해야 함

용어 설명

  • 연산자 우선순위
    : 곱셈, 나눗셈 > 덧셈, 뺄셈
  • 연산 순위 변경
    : 괄호(()) 활용
  • 참과 거짓
    : 1은 참(True), 0은 거짓(False)
  • 연산자의 중요성
    : 연산자를 잘못 사용함으로 해서 프로그램 실행 중 큰 오류를 가져올 수 있으니 주의할 것

산술 연산자

수의 연산에 사용되는 연산자

using System;
class Calculation {
	static void Main(){
    	// +, - 연산자는 우선순위가 같으므로 ()가 필요
    	Console.WriteLine("5+5는" + (5+5) + "입니다."); // 5+5는 10입니다.
        Console.WriteLine("5-5는" + (5-5) + "입니다."); // 5-5는 0입니다.
        Console.WriteLine("5X5는" + 5*5 + "입니다."); // 5X5는 25입니다.
        Console.WriteLine("5÷5는" + 5/5 + "입니다."); // 5÷5는 1입니다.
        Console.WriteLine("5÷3의 나머지는"+ 5%3 + "입니다."); // 5÷3의 나머지는 2입니다.
    }
}

대입 연산자

using System;
class Plus{
	static void Main()  {
    	int a = 90;
        
        a+= 10
        Console.WriteLine("90에 10을 더하면" + a + "입니다."); // 90에 10을 더하면 100입니다.
    }
}

증가 연산자와 감소 연산자

  • 전치 : ++a(--a)
  • 후치 : a++(a--)
  • 전치와 후치는 연산을 수행하는 타이밍이 다르다. 전치는 변수의 참조보다 앞에, 후치는 변수의 참조보다 뒤에 연산이 수행된다.
  int x, a=1;
   x = ++a
   // => 전치연산으로 a값을 x에 대입, x=2가 된다.
   
   int x, a=1;
   x = a++
   // => 후치 연산으로 a값을 x에 대입, x=1이 된다.

   using System;
   class Position {
     static void Main(){
       int a = 1;
       int b = 1;
       Console.WriteLine($"전치라면 a는 {++a}가 됩니다."); // 전치라면 a는 2가 됩니다.
       Console.WriteLine($"후치라면 b는 {b++}가 됩니다."); // 후치라면 b는 1이 됩니다.
     }
   }
```cs
using System;
class One{
	static void Main() {
    	int a = 1;
        Console.WriteLine($"시작은 {a}입니다."); // 시작은 1입니다.
        a++;
        Console.WriteLine($"1 증가시켜 {a}가 되었습니다."); // 1 증가시켜 2가 되었습니다.
        a--;
        Console.WriteLine($"1 감소시켜 {a}로 돌아왔습니다."); // 1 감소시켜 1로 돌아왔습니다.
    }
}

비교 연산자

변수의 값이나 수치를 비교해 조건식을 만들고 그 결과에 따라 처리를 달리할 때 사용하는 연산자

식이 가지고 있는 값

using System;
class Compare{
	static void Main() {
    int a = 10, b = 20;
    	Console.WriteLine("a =" + a + "b =" +b); // a=10 b=20
        Console.WriteLine("a < b ···" + (a < b)); // a<b ··· True
        Console.WriteLine("a > b ···" + (a < b)); // a>b ··· False
        Console.WriteLine("a == b ···" + (a == b)); // a==b ··· False
        Console.WriteLine("a = b ···" + (a = b)); // a==b ··· 20
        // 비교 연산자는 + 연산자보다 우선순위가 낮으므로 () 필요
    }
}

논리형

bool형. true 또는 false 중 한 값을 가진 변수의 형이다.

using System;

class Compare {
	static void Main(){
      int a= 10, b = 20;
      bool c, d, e;
      
      c = a < b;
      d = a > b;
      e = a == b;
      Console.WriteLine("a=" + a + "b=" +b); // a=10 b=20
      Console.WriteLine("a < b ···" + c); // a<b ··· True
      Console.WriteLine("a > b ···" + d); // a>b ··· False
      Console.WriteLine("a == e); // a==b ··· False

조건 연산자

  • [?:]는 조건식의 값에 따라 둘 중의 하나를 선택
  • 선택 값은 수치나 문자, 변수 등을 지정할 수 있음
bool sel;
	.
	.
	.
int a = sel ? 0 : 1; // sel : 조건식
  • 조건에 맞는 경우 (true) : : 왼쪽 값 선택
  • 조건에 맞지 않는 경우 (false) : :오른쪽 값 선택
using System;

class Judge{
	static void Main(){
    	string right = "정답", wrong = "오답";
        bool value;
        
        value = true;
        string answer = value ? right : wrong;
        Console.WriteLine(answer); // 정답
        
        value = false;
        answer = value ? right : wrong;
        Console.WriteLine(answer); // 오답
    }
}

논리 연산자

복수의 조건을 조합하여 더 복잡한 조건을 나타낼 때 사용하는

  • &&||는 단락 평가의 연산자로 높은 효율을 위해 필요 없는 평가는 생략한다. (&|는 생략X)

논리형

조건식은 논리형의 값(true, false)을 가지고 있으므로 조건식으로 bool형의 변수를 이용할 수 있다.

bool x = (c==5) // x는 c=5이면 true | c!=5이면 false
bool y = (c==9) // y는 c=9이면 true | c!=9이면 false
x || y // x=true 또는 y=true이면 true


using System;

class Or{
	static void Main() {
    	int a=3, b=4;
        bool x, y;
        
        x = (a<0);
        y = (b>0);
        Console.WriteLine((a == 3) && (b == 3)); // false
        Console.WriteLine(x||y); // True
    }
}

연산의 우선순위

  • 우선순위가 같을 때 사칙연산은 왼쪽부터, 대입은 오른쪽부터 실행

형의 변환

계산 중 발생하는 형 변환

  • C# 언어에서는 아래와 같이 계산이 된다.
    • 정수&정수의 계산 = 정수의 답
    • 실수&실수의 계산 = 실수의 답
    • 정수&실수의 계산 = 실수의 답
using System;

class Type {
  static void Main(){
  
  	Console.WriteLine($"3÷2={3/2}");
    Console.WriteLine($"3.0÷2.0={3.0/2.0}");
    Console.WriteLine($"3.0÷2={3.0/2}");
    Console.WriteLine($"3÷2.0={3/2.0}");
  }
}
  • 정수끼리의 계산에서는 범위가 가장 큰 범위의 형으로 변환된다.

정밀도나 범위가 서로 다른 형끼리의 대입

///* 오류가 나지 않는 경우 *///

// 정수형을 실수형에 대입
int i = 8;
float f = i;

// 범위가 더 큰 형에 대입
byte i = 10;
int f = i;


///* 컴파일 오류가 나는 경우 *///

// 실수형을 정수형, decimal형에 대입
double d = 2.8;
long l = d;

// decimal형을 실수형에 대입
decimal d = 29;
float l = i;

// 범위가 더 작은 형에 대입
long d = 35;
short l = d;

// 정수형을 문자형에 대입
int d = 41;
char l = d;

// 범위가 감당할 수 없는 형에 대입
byte d = 74;
sbyte l = d;

캐스트 연산자(형 변환 연산자)

형명을 ()로 묶은 것

using System;

class Cast{

  static void Main() {
    
    // float형으로 형 변환
    Console.WriteLine($"3÷2={(float) 3/2});
    Console.WriteLine($"3÷2={3/(float)2);
  }
}

checked, unchecked문

  • 오버플로
    • 변수에 선언된 데이터형의 범위보다 큰 값이 대입되어 자리가 넘치는 것
    • 오버플로를 일으키면 이상한 값이 결과로 반환된다.
  • checked문 : 오버플로 했을 때 예외 발생시킴 (예외 발생하므로 오버플로한 경우 수행하는 예외 처리 작성 필요)
  • unchecked문 : 오버플로해도 무시하고 아무 것도 모른 채 결과를 반환 (무시하고 지나가므로 예외 처리는 작성할 필요x)
using System;

class CheckedSample{
  static void Main(){
    int a, b;
    try{
      checked {
        a = int.MaxValue; // int의 최대값
        b = a + 1; // 오버플로 발생
        Console.WriteLine(b);
      }
    }
    catch (OverflowException oe){ // 오버플로 시의 예외 처리
      Console.WriteLine(oe.Message); // 산술계산의 결과 오버플로가 발생했습니다.
    }
  }
}
  • 연습문제 복습 : 1, 3

0개의 댓글