2014-05-13 1 views
0

이 코드를0 사람이 왜 그렇게입니다 설명 할 수 0

NSInteger q = 2048; 
BOOL boolQ = q; 

NSLog(@"%hhd",boolQ); 

을 고려 반환 BOOL에 주조?

+0

왜'% hhd'입니까? 나는 NSLog에서 1을 얻었다. – Larme

+0

NSLog에 0이 있습니다. –

+0

@DarshanKunjadiya 귀하의 요점에 대해 더 많은 설명을주십시오. 그 질문은 여기에 ... – Mani

답변

3

BOOL 아마 정수의 절반 "hh" 인쇄 절반으로, char 또는/int8_tuint8_t로 구현됩니다. 일반적으로 1 바이트입니다.

char으로 변환하면 2048 (= 0x800)의 가장 낮은 8 비트를 사용하며 0을 제공합니다.

부울 값을 임의의 정수로 변환하는 적절한 방법은 다음 변환 된 값을 표시하기에 너무 작은 형태로 정수 값 주조

NSInteger q = some-value; 
BOOL b = !!q; 
+0

이 의미가 있지만, 당신은 BOOL 값이 실제로 아니 볼 것입니다 그것을 디버그하면 NSLog hdd 그냥 추가했습니다. 그것을 인쇄하십시오. NSLog 라인 위의 중단 점에서 멈 추면 boolQ가 NO인지 검사 할 수 있습니다. – haawa

+0

이제 많은 이해! – haawa

+0

이 대답에 따르면'http : // stackoverflow.com/a/544250/694576'은'(BOOL) 0'에 대한'#define '입니다. @haawa – alk

0

C (C11 표준 부록 J.에서 정의되지 않은 동작이며 2), 따라서 C 수준의 문제를 다루는 Objective-C의 부분에서도 마찬가지입니다. 정의되지 않은 행동이기 때문에 원하는 결과를 나타낼 수 있지만 기대 값은 아닙니다.

으로 6.3.1.4 당, 정수는 !! 관용구에 상승을 제공 (다른 모든는 1, 0 0)으로는 예상되는 동작을 보여줍니다이 경우 캐스팅없이 부울 값을 을 사용할 수 있습니다 alk에 의해 제안 된; 아마도 반 직관적으로 이 아닌 값을으로 명시 적으로 변환하면됩니다 (대신에 ! 연산자가 삽입 한 암시 적 변환 작업에 의해 변환이 올바르게 처리됩니다).

관련 문제