산술연산자

Kiwoong Park·2023년 7월 14일
0

출처 : C++ 실력 완선 올인원 패키지 Online (fastcampus)

연산자 우선순위와 결합성

연산자 우선순위

#include <iostream>

using namespace std;

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


        int a, b, c;
        // 할당 연산자는 결합성이 오른쪽에서 왼쪽. 할당 후 할당 된 값을 반환한다.
        a = b = c = 10;

        cout << a << endl;
        cout << b << endl;
        cout << c << endl;
    }

정의되지 않은(undefined behavior) 행동

💥🚫하나의 식에서 하나의 변수를 두 번 이상 변경할 때 주의해야 함!

시퀀스 포인트(sequence point)는 연산의 순서를 보장하는 것; 대표적인 것이 세미콜론(;). 함수 호출 연산자, 쉼표 연산자 등
시퀀스 포인트 MS

    {
        // 정의되지 않은 행동
        // 시퀀스 포인트 이전에 같은 변수를 변경하는 행동은 주의
        // 세미콜론은 대표적인 시퀀스 포인트
        int num = 10;
        cout << ++num + num++ << endl; // 정의되지 않은 행동 ~ 22 인경우도 있고, 23인 경우도 있음.
        cout << num << endl;

        printf("%d %d\n", ++num, ++num); // 정의되지 않은 행동
        printf("%d\n", num);
    }
profile
You matter, never give up

0개의 댓글