더북(TheBook)

TAKEAWAY 4.14 논리 연산자는 falsetrue 값을 리턴한다.

앞에서 설명했지만 truefalse10을 다르게 표현한 것에 불과하다. 따라서 다음과 같이 배열의 인덱스로 사용할 수도 있다.

double largeA[N] = { 0 };
...
/* largeA를 채운다. */

size_t isset[2] = { 0, 0 };
for (size_t i = 0; i < N; ++i) {
    isset[!!largeA[i]] += 1;
}

!!largeA[i]란 표현식에서 largeA[i] 값이 반드시 진리값으로 평가되도록 강조하기 위해 ! 연산자가 두 번 사용됐다(TAKEAWAY 3.4). 따라서 isset[0]isset[1]에는 각각 0.0과 같은 값의 개수와 그렇지 않은 값의 개수가 담긴다.

▲ 그림 4-2 isset 배열의 구조

&&|| 연산자는 단락 평가(short-circuit evaluation)C가 적용된다. 표현이 다소 생소하지만 쉽게 말하면 두 번째 피연산자에 대한 평가는 상황에 따라 생략할 수 있다는 뜻이다.

// 0으로 나누는 일은 절대 발생할 수 없다.
if (b != 0 && ((a/b) > 1)) {
  ++x;
}

실행 과정에서 a/b 부분에 대한 평가는 생략할 수 있다. 따라서 0으로 나누는 일은 절대로 발생하지 않는다. 이 코드를 다음과 같이 작성할 수도 있다.

if (b) {
  // 0으로 나누는 일은 절대 발생하지 않는다.
  if (a/b > 1) {
    ++x;
  }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.