C에서 0을 제외한 모든 양수 값은 부울 true로 처리됩니다. 그러나 부정적인 가치는 어떻습니까? 몇 가지 테스트를했는데 음수 값도 부울 true로 처리됩니다. 이것이 정의 된 행동인가 구현인가? 부울 값이 정의 되었습니까?
는답변
이 정의 행동 (I 질문에서 보았을 때 나는 누군가가 "true"를 1과 0으로 열거에서 "false"로 선언 추진, 이것에 대해 생각했다). 내가 어떤 스칼라 값이 _Bool로 변환되면 C99 표준 내용은 이러한
§ 6.3.1.2
으로 진술에 대해 살펴 보겠습니다 결과는 값이 0에 동일한 비교 경우 0; 그렇지 않으면 결과는 1입니다.
+1 표준을 지적했다. – Jay
+1 표준'bool'이 좋다. 특정 컴파일러에 C99 지원이 부족한 경우 대체 할 수있는'enum'을 사용합니다. –
C에서는 부울 유형이 없습니다. 부울 컨텍스트에서 0과 0.0f는 "거짓"으로 간주되고 나머지는 모두 "참"입니다.
if (2 == TRUE)
(2 "사실"로 평가해야하지만, TRUE 1로 정의되어있는 경우 : 다음 코드는 휴식 때문에 열거에서 "사실"과 "거짓"으로 잘못 선언
두 값은 같지 않은 것으로 간주됩니다).
저는 0은 거짓이고 나머지는 사실이라고 믿습니다. 여기
참조 @ 캐스퍼의 대답은 : thread
나는 0 절대적으로 정의되며, 사실은 허위로 정의된다 거짓, 여기에 C에서 힌트를 취할 것입니다. 이것은 참의 절대 값과 비교할 때 중요한 차이입니다. 두 가지 상태 만있는 유형이 아니라면 해당 값 유형 내의 모든 값, 참, 거짓을 설명해야합니다.
이 C 0에, 올바른 동작 것은 거짓 및 다른 모든 C가 거짓과 다른 모든 진실한 0 정의 진정한
입니다. 긍정, 부정, 뭐든간에.
은 내가 최근에 내가 그것까지 소유 것이다 typedef enum { false, true } bool;
의 사용을 옹호 생각합니다. (원래 코드에 typedef
이 포함되어 있지 않으면 그 부분에 대한 판단 오류입니다.) 0이 아닌 모든 값이 true이므로 다음과 같이 열거 된 bool
유형을 사용하여 옹호하지 않을 것입니다.
if(x == true) // not what you want
if(!x == false) // works, but why so much effort?
나는 일반적으로 논리 값에 대한 명시적인 시험을 단순히 if(x)
또는 if(!x)
을 perfer. 하지만 경우에 따라서는 부울 형이하는 것이 좋다 :
bool is_something(int x)
{ // assume for the sake of an argument that the test is reasonably complex
if(/* something */) return false;
if(/* something else */) return true;
return false;
}
이 유형 int
있을 것보다 더 낫다,하지만 적어도 당신은 결과가 무엇을 의미하는지에 명시되고 있습니다.
typedef enum { false, true = !false } bool;
내가 !
가 0 또는 1을 반환 보장된다 생각하지만, 내가 잘못 될 수 있고, 또한 위의 작품 중 하나 방법 :
또한, 무엇보다도 사람에 따라 bool
더 나은이 될 수 있습니다.
그냥하지 마세요. 'bool','true','false'는 "stdbool.h"에 정의되어 있습니다. –
@Jens - 모든 시스템이 C99을 지원하지는 않습니다. 아마도 누군가의 컴파일러가 정말로 오래되었거나 마이크로 소프트에 의해 만들어 졌을 것입니다. 누군가가없는 경우에 대비하여 'bool' 당신은 백업을 가지고있을 수도있는 첫 번째 장소에서'bool' 타입을 사용할 것입니다. –
그러면 C89에서 어떻게 예상되는지, 즉 부울 값에 대해 int를 사용하는 것이 좋습니다. 그리고 대체 파일을'bool == int','false == 0','true == 1' 매크로로 정의하는 별도의 파일로 정의하십시오. 그렇지 않으면 일단 C99 컴파일러를 사용하게되면 이것은 포트에 큰 고통이됩니다. –
- 1. 바인드 h : selectBooleanCheckbox 값이 부울/부울 대신 정수/부울
- 2. 프롤로그 조건부가 2 개의 부울 OR로 정의 되었습니까?
- 3. __VSFINDRESULT의 값이 잘못 되었습니까?
- 4. HashMap 값이 잘못 되었습니까?
- 5. TypeError : 부울 값이 함수가 아닙니다.
- 6. 부울 결과에 Char 및 부울 표현식 결과가 추가 되었습니까?
- 7. rails 3.0.3 부울 값이 참인지 확인하십시오.
- 8. 윅스 부울 속성 값이 작동하지 않습니다
- 9. NSDictionary가 정의 되었습니까?
- 10. jQuery는 contentScripts에서만 정의 되었습니까?
- 11. C#과 C++ 사이의 값이 동기화 되었습니까?
- 12. 정규 표현식에 빈 값이 누락 되었습니까?
- 13. Rails param 값이 빈 int로 반환 되었습니까?
- 14. php strtotime에 문제가있어서 값이 잘못 되었습니까?
- 15. Tomcat maxpostsize 값이 XMLHttpRequest에서 무시 되었습니까?
- 16. sql resultset 순서가 정의 되었습니까?
- 17. 정의 된 값이 삽입되지 않았습니다.
- 18. Info.plist에서 사용자 정의 설정의 부울 속성 설정
- 19. 위 부울 낮은 부울
- 20. Perl에 내장 된 true/false 부울 값이 있습니까?
- 21. PHP : 반환 값이 부울 인 참조 함수 - 이상한 고지
- 22. 파이썬에서 객체의 부울 값
- 23. 왜 내 ASP.NET 사용자 정의 컨트롤의 필드 값이 0으로 재설정 되었습니까?
- 24. MATLAB : 필드 이름의 순서가 정의 되었습니까?
- 25. Digest :: SHA2.hexdigest()는 어디에 정의 되었습니까?
- 26. 왜 data.table이 정의 되었습니까? = 오버로드가 아닌 <-?
- 27. 인증 모드 - 응용 프로그램이 정의 되었습니까?
- 28. 여기서 windows API 함수가 정의 되었습니까?
- 29. Photologue의 Photo.get_previous_by_date_added() 메소드는 어디에 정의 되었습니까?
- 30. 레일 : "params"는 어디에 정의 되었습니까?
'거짓'이 아닌 것은 모두 '사실'입니까? – khachik
나는 이것을 생각한다 http://stackoverflow.com/questions/727196/boolean-true-positive-1-or-negative-1 귀하의 질문에 대한 답변을 –