테이블 4-1에서, 배정문에서 사용되는 등호 기호 =이 연산자로 취급된다는 것을 알 수 있다. 즉, =은 배정 연산자이다.

다음은 배정 연산자가 포함된 식의 예이다.

    n = age >= 25

배정 연산자가 연산자 우선순위가 가장 낮으므로 다음과 같이 평가된다.

 

위의 식에서 관계 연산자 적용 결과로 부울 값이 생성되고, 이 값이 n에 배정된다.
위의 식 평가 과정을 보여주는데 있어서 배정 연산자를 별도로 표현하지 않았음을 유의하라. 이것은 배정 연산자가 오른쪽 식의 값을 단지 왼쪽에 위치한 변수에 배정하기 때문이다.

n에는 실제로 어떤 값이 배정되는가? false가 배정되는가? 그렇지 않다. 불행하게도, C 언어는 부울 데이터 타입을 제공하지 않는다(최근에개발된 대부분의 다른 프로그래밍 언어는 부울 데이터 타입을 제공한다).

대신, C 언어는 관계나 논리 식의 평가 결과 값이 true일 경우에 1을 생성하고, false일 경우에는 0을 생성한다는 것을 유의하라.

따라서 다음 식의 평가에서 age가 28이면 n에는 1이 배정되고, age가 20이면 n에는 0이 배정된다.


여러분은 C 언어가 부울 데이터 타입을 제공하지 않고, 식의 값이 true일 경우에 1을, false일 경우에 0을 생성한다는 사실에 주의해야 한다.

다음 식을 생각해 보자.

    5 < n < 10

위의 식은 수학적으로나 C언어식으로도 올바르다. n이 7을 포함하고 있는 경우와 13을 포함하고 있는 경우를 생각해보자. 수학적으로, 위의 식은 n이 7을 포함할 경우에 true이고, 13을 포함할 경우에 false이다. C언어식도 동일한 n의 값에 대해서 결과 결과를 생성하는가?

먼저, n이 7을 포함하는 경우를 생각해보자. '<' 연산자의 결합 법칙이 '왼쪽에서 오른쪽'이므로 위의 식은 다음과 동일하다.

    (5 < n ) < 10

다음은 위 식의 평가 과정을 보여준다.

 

첫 번째 관계 연산자의 적용 결과 1을 생성한다. 이 값은 두 번째 관계 연산자의 첫 번째 피연산자로 전달된다. 이제 두 번째 관계 연산자는 1과 10을 비교한다. 10이 1보다 크므로 그 적용 결과로 true 값 즉, 1을 생성한다.

이제 n이 13을 포함하고 있는 경우를 생각해보자.

 

n이 13을 포함할 때 위의 식이 수학적으로 거짓임에도 불구하고, 여전히 true(1)로 평가되는 것을 알 수 있다. 따라서 위 식의 평가 결과는 사용자의 의도와는 다르게 잘못된 결과를 생성한다.

위의 식을 어떻게 사용자의 의도와 일치되게 올바르게 표현할 수 있는가? 위의 식을 다음과 같이 수정한다.

    5 < n && n < 10

다음은 위 식의 평가 과정을 보여준다.


위의 식에서 관계 연산자가 논리 연산자보다 우선순위가 높기 때문에 먼저 평가된다.
n이 13을 포함하고 있으므로, 첫 번째 관계 연산자의 적용 결과는 1이고, 두 번째 관계 연산자의 적용 결과는 0이다. 이 1과 0이 논리 연산자 &&의 피연산자가 된다. 논리 연산자는 이 수치 값을 어떻게 해석할 것인가? 이미 다루었듯이, 논리 연산자는 참이나 거짓을 값으로 갖는 부울 데이터를 피연산자로 갖는다는 사실을 기억하라.

다시 한번, C 언어는 부울 데이터 타입을 제공하지 않는다는 사실에 유의해라. 대신, C 언어는 0을 false로 인식하고, 0이 아닌 다른 모든 값을 true로 인식하여 부울 데이터를 취급할 수 있는 방법을 제공한다.

따라서 위의 식에서 && 연산자는 1을 true로 인식하고, 0을 false로 인식한다. 이 경우 && 연산자의 적용 결과는 false 즉, 0을 생성한다. 이제 위의 식은 '5 < n < 10'의 수학 식과 일치된 의미를 갖는다는 것을 알 수 있다.

 C 언어는 부울 데이터 타입을 제공하지 않지만,
 수치 값으로 부울 데이터를 취급할 수 있는 방법을 다음과 같이 제공한다.

          1. 식의 결과 값이 true이면 1을 생성하고, false이면 0을 생성한다.
          2. 식의 피연산자가 0이면 false로 해석하고, 0이 아닌 모든 다른 값을 true로 해석한다.

top으로... 다음페이지로.. 이전페이지로.. home으로..

top으로... 이전페이지로.. home으로..

top으로... 다음페이지로.. 이전페이지로.. home으로..

top으로... 다음페이지로.. 이전페이지로.. home으로..

 

top으로... 다음페이지로.. 이전페이지로.. home으로..