4. Expressing computations

다른 값을 이용해 값을 계산한 식을 표현식이라 한다.

Takeaway 1.4.0.1. size_t 자료형은 [0, SIZE_MAX] 범위를 나타낸다.

size_t 같이 음이 아닌 정수형을 비부호 정수형이라 한다. +, != 등을 연산자라 하고, 연산자의 대상을 피연산자라 한다.

4.1. Arithmetic.

4.1.1. +, – and *.

-는 비부호 정수형에서도 잘 정의된다.

Takeaway 1.4.1.1. 비부호 정수형의 사칙연산은 항상 잘 정의된다.

Takeaway 1.4.1.2. size_t의 +, -, * 연산은 계산 결과가 size_t로 표현된다면 항상 올바른 결과가 된다.

계산 결과가 size_t로 표현되지 않을 때오버플로우라고 한다.

4.1.2. Division and remainder.

Takeaway 1.4.1.3. 비부호 정수형에 대해, a == (a / b) * b + (a % b)이다.

Takeaway 1.4.1.4. 비부호 정수형에 대해, 두 번째 피연산자가 0이 아니라면 /와 %는 잘 정의된다.

Takeaway 1.4.1.5. size_t에 대한 사칙연산은 % (SIZE_MAX + 1)을 암묵적으로 수행한다.

Takeaway 1.4.1.6. 오버플로우가 나는 경우, 비부호 정수형은 순환한다.

Takeaway 1.4.1.7. 비부호 정수형의 /, % 값 결과는 피연산자보다 작다.

Takeaway 1.4.1.8. 비부호 정수형의 /, %는 오버플로우가 나지 않는다.

4.2. Operators that modify objects.

대입 연산자 우변의 값을 우측값, 좌변의 값을 좌측값이라 하지만 혼란을 주는 용어이므로 C에서는 가급적 쓰지 않는다.

Takeaway 1.4.2.1. 연산자 문자는 붙여 써야 한다.

증가 연산자감소 연산자 ++, –를 표현식 내에 써서 부가 효과를 일으키지 말자.

Takeaway 1.4.2.2. 값 표현식 내에서의 부가 효과는 악이다.

Takeaway 1.4.2.3. 선언문 내에서 절대 두 개 이상의 오브젝트를 수정하지 마라.

증가 연산자와 감소 연산자에 대해 후치 증가, 후치 감소 형태도 존재한다.

4.3. Boolean context.

4.3.1. Comparison.

Takeaway 1.4.3.1. 비교 연산자는 true나 false를 리턴한다.

4.3.2. Logic.

Takeaway 1.4.3.2. 논리 연산자는 true나 false를 리턴한다.

&&나 || 연산자는 단락 평가 메커니즘을 택한다. 앞의 표현식 평가만으로 전체 식의 결과를 알 수 있다면 뒤의 표현식은 무시된다.

4.4. The ternary or conditional operator.

삼항 연산자는 if문과 흡사한 방식의 표현식이다.

sqrt 내에 음수를 넣는다든가 하는 경우 도메인 오류가 난다.

전처리문 지시자를 달아 조건부로 컴파일되게 할 수 있다.

4.5. Evaluation order.

Takeaway 1.4.5.1. &&, ||, ? :, , 연산자는 첫 번째 피연산자부터 평가한다.

Takeaway 1.4.5.2. , 연산자를 쓰지 마라.

Takeaway 1.4.5.3. 대부분의 연산자는 피연산자의 평가 순서를 정의하지 않는다.

Takeaway 1.4.5.4. 함수 호출은 매개변수의 평가 순서를 정의하지 않는다.

Takeaway 1.4.5.5. 표현식 내의 함수 호출은 부가 효과를 낳아서는 안 된다.

요점 정리

  • 산술 연산자는 산술 계산을 한다.
  • 대입 연산자는 오브젝트를 바꾼다.
  • 비교 연산자는 값을 비교해 0, 1을 리턴한다.
  • &&, ||, ? :, ,를 제외한 모든 연산자나 함수 호출은 피연산자나 매개변수의 평가 순서를 정의하지 않는다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중