4.3.1 비교 연산
비교 연산자(comparison operator)(==, !=, <, >)는 앞에서 본 적이 있다. <와 >는 피연산자가 서로 같을 수 없는 경우를 비교하고, <=와 >=는 각각 ‘작거나 같다’와 ‘크거나 같다’를 표현한다. 이런 연산자는 제어문에서 흔히 사용하지만 그 이상의 역할도 한다.
TAKEAWAY 4.13 비교 연산자는 false나 true 값을 리턴한다.
true나 false는 어디까지나 1과 0을 다르게 표현한 단어일 뿐이다. 따라서 산술 연산이나 배열 인덱스로도 사용할 수 있다. 다음 코드에서 c는 항상 1이고, d는 a와 b가 같으면 1이고 그렇지 않으면 0이다.
size_t c = (a < b) + (a == b) + (a > b); size_t d = (a <= b) + (a >= b) - 1;
다음 예에 나온 배열 원소 중에서 sign[false]는 largeA에 있는 값 중 1.0보다 같거나 큰 것의 개수를 기록하고, sign[true]는 1.0보다 작은 값의 개수를 기록한다.
double largeA[N] = { 0 }; ... /* largeA를 채운다. */ size_t sign[2] = { 0, 0 }; for (size_t i = 0; i < N; ++i) { sign[(largeA[i] < 1.0)] += 1; }
▲ 그림 4-1 sign 배열의 구조
마지막으로 not_eq란 식별자도 있는데, != 대신 쓸 수 있지만 실제로 사용하는 경우는 거의 없다. 이 구문은 !=를 제대로 표현하지 못하는 컴퓨터가 있던 시절에 나온 것이며, 이를 사용하려면 iso646.h 헤더 파일을 인클루드해야 한다.