[모던C++입문] 1.3 연산자

    1.3 연산자

    • 계산연산자
      • 산술 연산자 : ++, +, *, &, ...
      • 불 연산자
        • 비교 연산자 : <=, !=, ...
        • 논리 연산자 : &&, ||
      • 비트 연산자 : ~, <<, >>, &, ^, |
      • 할당 연산자 : =, +=, ...
      • 프로그램 흐름 연산자 : 함수호출, ?:, |
      • 메모리 처리 연산자: new, delete
      • 접근 연산자 : ., ->, [], *, ...
      • 타입 처리 연산자 : dynamic_cast, typeid, sizeof, alignof
      • 오류 처리 연산자 : throw

    산술 연산자

    연산 표현식
    후위 증가
    후위 감소
    x++
    x--
    전위 증가
    전위 감소
    단항 덧셈
    단항 뺄셈
    ++x
    --x
    +x
    -x
    곱셈
    나눗셈
    나머지
    x * y
    x / y
    x % y
    이항 덧셈
    이항 뺄셈
    x + y
    x - y
    int i = 3;
    i++;            //이제 i = 4
    const int j - 5;
    j++;            //j는 상수 (빌드오류 : '++'에 l-value가 필요합니다.)
    (3+5)++;        //일시적인 값 (빌드오류 : '++'에 l-value가 필요합니다.)
    
    int i = 3, j = 3;
    int k = ++i + 4;        //i는 4, k는 8
    int l = j++ + 4;        //j는 4, l는 7

    인수의 계산순서는 정의되지 않는다.

    int i = 3, j = 7, k;
    k = f(++i) + g(++i) + j;

    위의 경우 컴파일러에 의해 f(4) + g(5) + 7 이거나 f(5) + g(4) + 7 중 하나로 계산됨
    코드를 분리하여 순서를 명확히 하자

    변환은 정밀도 손실을 초래할 수 있다

    long l = 123456789012;
    long l2 = l + 1.0f - 1.0;   //부정확
    long l3 = l + (1.0f - 1.0); //정확
    
    //결과값
    l2 = 1234567954431
    l3 = 1234567890123

    불 연산자

    연산 표현식
    아니다 !b
    크다
    크거나 같다
    x > y
    x >= y
    작다
    작거나 같다
    x < y
    x <= y
    같다
    같지 않다
    x == y
    x != y
    논리적 AND
    논리적 OR
    b && c
    b || c

    비교는 연결해서 사용할 수 없다

    bool in_bound = min <= x <= y <= max;   //오류
    bool in_bound = min <= x && x <= y && y <= max;

    비트 연산자

    연산 표현식
    NOT(1의 보수) ~x
    왼쪽 시프트 x << y
    오른쪽 시프트 x >> y
    비트 AND x & y
    비트 OR x ^ y
    비트 XOR x | y

    할당 연산자

    연산 표현식
    단순 할당
    곱셈 후 할당
    나눗셈 후 할당
    나머지 후 할당
    덧셈 후 할당
    뺄셈 후 할당
    왼쪽 쉬프트 후 할당
    오른쪽 쉬프트 후 할당
    AND 후 할당
    OR 후 할당
    XOR 후 할당
    x = y
    x *= y
    x /= y
    x %= y
    x += y
    x -= y
    x <<= y
    x >>= y
    x &= y
    x |= y
    x ^= y

    프로그램 흐름

    • 조건 연산자(삼항 연산자)
      c ? x : y 는 조건 c를 계산한뒤 참일경우 x, 거짓일경우 y 값을 갖는 연산자
      if문의 대한으로 사용할수 있다
    • 콤마 연산자
      순차적인 계산을 제공하는 연산자
      for문에서 ++i, ++j 형태로 사용하는 경우 등이 있다

    메모리 처리

    • new연산자는 메모리를 할당하고 delete 연산자는 메모리를 해제하는 연산자

    접근 연산자

    연산 표현식
    멤버 선택
    역참조된 멤버 선택
    첨자
    x.m
    p->m
    x[i]
    역참조 *x
    멤버 역참조
    역참조된 멤버 역참조
    x.q
    p->
    q

    타입 처리

    연산 표현식
    런타임 타입 식별
    타입 식별
    typeid(x)
    typeid(t)
    오브젝트의 크기
    타입의 크기
    인수의 개수
    타입 인수의 개수
    맞춤(alignment)
    타입의 맞춤
    sizeof(x) or sizeof x
    sizeof(t)
    sizeof...(p)
    sizeof...(P)
    alignof(x)
    alignof(t)

    오류 처리

    • throw연산자는 실행시 예외를 나타내는데 사용

    연산자 우선순위

    반응형

    댓글

    Designed by JB FACTORY