2011-03-23 4 views
1

다음 함수에서부울 결과에 Char 및 부울 표현식 결과가 추가 되었습니까?

진술 문 s[i] + s[i] == c;은 0 또는 1 (부울 결과)이됩니다.

내 질문 : 위의 표현식을 부울 표현식으로 변환 하시겠습니까? s[i]의 가치를 고려하고 있습니다.

void func(char s[], int c) 
{ 
    int i, j; 
    for (i = j = 0; s[i] != '\0'; i++) 
     if (s[i] != c) 
      s[j++] = s[i] + s[i] == c; 
    s[j] = '\0'; 
} 

답변

2

전제가 잘못되었습니다. s[i] + s[i]==c(s[i] + s[i]) == c과 같습니다. 따라서 "char 및 부울 식 추가"가 아닙니다.

결과는 논리식이지만 C.에는 프리미티브 bool 유형 10 또는 하나의 값, 그래서이 식 형 int 될 것이다 없다는 것을주의. 따라서 s[j]의 값은 1 또는 0이됩니다.

+0

C에는'bool' 유형 (def)이 있는데,'stdbool.h '에'_Bool'로 정의되어 있습니다. 그러나'=='연산자의 결과는 'int'이며 'bool'이 아닙니다. –

+0

@R ..'_Bool'은 C99에서 사용할 수 있으며 C의 다른 방언이 사용되는 경우에는 사용할 수 없다는 점에 유의해야합니다. Objective-C (C의 엄격한 상위 집합)에는'BOOL'이 있습니다. –

+0

@R .. : 네, 맞습니다. 내가 갱신하자. –

0

C에서 부울 유형이 없으므로 적어도 사용하지 않는 표준 부분을 살펴보아야합니다.

의미 상으로는 부울 값을 갖는 표현식은 int으로 값 1 (참)과 0 (거짓)으로 컴파일러에서 관리합니다. 그 값을 char에 할당하면 적절히 다운 캐스팅/강등됩니다.

이 :

char a, b, c; 
a = (b == c); 

이 같은 작품 :

char a, b, c; 
a = (b == c) ? 1 : 0; 

모두 1과 0이 할당에 숯불을 강등 정수 유형의이다.

+0

-1 + 1 = 0입니다. 왜냐하면'_Bool'이라는 부울 유형이 있기는하지만 여러분이 표준의 대부분 사용되지 않는 부분 인 IMO와 같이 표현식 –

+1

@Jens의 반환 유형에 맞습니다. 나는 Bool을 사용하는 코드를 한번도 본 적이 없다. – slezica

+0

"stdbool.h"가 제공하는보다 사용자 친화적 인 파생물'bool'을 사용하는 많은 사람들이 볼 수 있습니다. 그리고 나는 '참'과 '거짓'을 사용할 수 있지만 '참'과 '거짓'의 여러 가지 특수한 정의를 보았습니다. –