더북(TheBook)

4.1.1 +, -, *

쉽게 예상하듯이 +, -, * 산술 연산자는 각각 두 값을 더하고, 빼고, 곱한다.

size_t a = 45;
size_t b = 7;
size_t c = (a - b)*2;
size_t d = a - b*2;

이 예에서 c76이고, d31이 된다. 이렇듯 부분 표현식을 소괄호로 묶어서 연산자를 원하는 형태로 바인딩할 수 있다.

+-는 단항 연산자로도 사용할 수 있다. -bb의 음수값을 나타낸다. 다시 말해 b + a = 0에서 a에 해당하는 값이다. 다음 표현식의 결과도 76이다.

size_t c = (+a + -b)*2;

부호 없는 타입으로 계산하더라도 - 연산자를 통해 얼마든지 음수로 만들거나 뺄셈을 할 수 있다. 전문 용어로 - 연산자는 부호 없는 타입에 대해서도 잘 정의되어 있다(well-defined)C고 표현한다. size_t의 장점 중 하나는 +, -, * 연산을 얼마든지 적용할 수 있다는 것이다. 최종 계산 결과가 [0, SIZE_MAX] 구간을 벗어나지 않는 한 정식 결과값이 된다.

TAKEAWAY 4.2 산술 연산은 부호 없는 타입에 대해서도 잘 정의되어 있다.

TAKEAWAY 4.3 size_t에 대한 +, -, * 연산 결과가 size_t로 표현될 수 있다면 정식 결과가 된다.

계산 결과가 이 구간을 벗어날 때, 즉 size_t표현 가능(representable)C하지 않을 때, 오버플로(overflow)C가 발생했다고 말한다. 예를 들어 두 값을 곱한 결과가 SIZE_MAX를 넘을 정도로 너무 클 때 오버플로가 발생할 수 있다. C 언어에서 오버플로를 처리하는 방법에 대해서는 다음 장에서 설명한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.