4.1.1 +, -, *
쉽게 예상하듯이 +, -, * 산술 연산자는 각각 두 값을 더하고, 빼고, 곱한다.
size_t a = 45; size_t b = 7; size_t c = (a - b)*2; size_t d = a - b*2;
이 예에서 c는 76이고, d는 31이 된다. 이렇듯 부분 표현식을 소괄호로 묶어서 연산자를 원하는 형태로 바인딩할 수 있다.
+와 -는 단항 연산자로도 사용할 수 있다. -b는 b의 음수값을 나타낸다. 다시 말해 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 언어에서 오버플로를 처리하는 방법에 대해서는 다음 장에서 설명한다.