산술 연산자

Jaemyeong Lee·2024년 7월 31일
0

FastCampusC++

목록 보기
10/78

산술 연산자 코드 및 주석

#include <iostream>

using namespace std;

int main()
{
    {
        // 연산자의 우선 순위
        // "/" 연산자가 "-" 연산자보다 우선 순위가 높아 먼저 계산 된다.
        int num = 40 - 32 / 2; // 32 / 2 먼저 계산 -> 16, 40 - 16 -> 24
        cout << num << endl; // 24
    }
    {
        // 연산자의 결합성
        // 우선순위가 같은 연산자들끼리는 결합성의 방향에 따라 계산을 한다.
        // 8 / 2 / 2 * 2 -> 나눗셈, 곱셈은 우선순위가 같고 결합성은 왼쪽에서 오른쪽
        // 4 - 6 + 2 + 8 / 2 / 2 * 2; -> (8 / 2) / 2 -> 2 * 2 -> 4, 4 - 6 + 2 + 4
        int num = 4 - 6 + 2 + 8 / 2 / 2 * 2; // -2 + 2 + 4 -> 4
        cout << num << endl; // 4

        int a, b, c;
        // 할당 연산자는 결합성이 오른쪽에서 왼쪽. 할당 후 할당 된 값을 반환한다.
        a = b = c = 10;
        cout << a << endl; // 10
        cout << b << endl; // 10
        cout << c << endl; // 10
    }
    {
        // 선언문에서 '=' 는 할당 연산자가 아님
        int num = 10; // 변수 선언 및 초기화
        cout << num << endl; // 10
    }
    {
        // 정수형 리터럴에 '-'를 붙임. 
        // 뺄셈의 '-'는 이항 연산자
        // 수의 부호를 바꿔주는 '-'는 단항 연산자
        cout << -1 << endl; // -1
        cout << +-+-+-1 << endl; // -1
    }
    {
        int num = 0;
        // 전위 증가 연산자. 해당 변수에 1을 더하고 더한 값을 반환
        cout << ++num << endl; // 1
        // 전위 감소 연산자. 해당 변수에 1을 빼고 뺀 값을 반환
        cout << --num << endl; // 0
        // 후위 증가 연산자. 해당 변수에 1을 더하고 더하지 않은 원래 값을 반환
        cout << num++ << endl; // 0
        // 후위 감소 연산자. 해당 변수에 1을 빼고 빼지 않은 원래 값을 반환
        cout << num-- << endl; // 1
        cout << num << endl; // 0
    }
    {
        // 복합 할당 연산자
        int num = 10;
        
        // 좌항의 변수에 우항의 값을 더한 결과를 좌항에 할당
        num += 5;
        cout << num << endl; // 15

        // 좌항의 변수에 우항의 값을 뺀 결과를 좌항에 할당
        num -= 5;
        cout << num << endl; // 10

        // 좌항의 변수에 우항의 값을 곱한 결과를 좌항에 할당
        num *= 5;
        cout << num << endl; // 50

        // 좌항의 변수를 우항의 값으로 나눈 결과를 좌항에 할당
        num /= 5;
        cout << num << endl; // 10

        // 좌항의 변수를 우항의 값으로 나누고 남은 나머지를 좌항에 할당
        num %= 5;
        cout << num << endl; // 0
    }
    {
        // 정의되지 않은 행동
        // 시퀀스 포인트 이전에 같은 변수를 변경하는 행동은 주의
        // 세미콜론은 대표적인 시퀀스 포인트
        int num = 10;
        cout << ++num + num++ << endl; // 정의되지 않은 행동
        cout << num << endl; // 결과는 컴파일러에 따라 다를 수 있음

        printf("%d %d\n", ++num, ++num); // 정의되지 않은 행동
        printf("%d\n", num); // 결과는 컴파일러에 따라 다를 수 있음
    }
}

연산자의 우선순위와 결합성

연산자설명우선순위결합성
* / %곱셈, 나눗셈, 나머지높음왼쪽
+ -덧셈, 뺄셈중간왼쪽
=할당낮음오른쪽

복합 할당 연산자

연산자설명
+=좌항에 우항을 더한 결과를 좌항에 할당
-=좌항에 우항을 뺀 결과를 좌항에 할당
*=좌항에 우항을 곱한 결과를 좌항에 할당
/=좌항을 우항으로 나눈 결과를 좌항에 할당
%=좌항을 우항으로 나눈 나머지를 좌항에 할당

단항 연산자

연산자설명
++증가 연산자 (전위, 후위)
--감소 연산자 (전위, 후위)
-부호 변경

주의사항: 정의되지 않은 행동

  • 시퀀스 포인트 이전에 같은 변수를 여러 번 변경하는 행동은 정의되지 않은 행동입니다.
  • 예를 들어, cout << ++num + num++ << endl;는 컴파일러마다 다른 결과를 초래할 수 있습니다.
  • 이와 같은 경우는 피해야 합니다.
profile
李家네_공부방

0개의 댓글