2014-05-16 6 views
0

내 응용 프로그램에서는 처음에 0이 할당 된 long long 값 _flightId에서 부울을 반환하는 함수가 있습니다. 아래 함수를 호출하기 전에 어느 시점에서 대개 값이 할당됩니다. long long에서 부울 값을 반환하는 것이 다릅니다.

@property (nonatomic, assign) long long flightId; 

- (BOOL)isReady 
{ 
    return (_flightId); 
} 

문제

때때로, 그것은 0보다 다른 값을 할당도 힘든, 함수가 0을 반환 할 것입니다. 예를 들어

:

_flightId 경우 = 92559101 함수 1를 리턴한다.

_flightId = 92559104 인 경우 함수는 0을 반환합니다.

누군가가이 동작을 설명 할 수 있습니까?

+1

가 반환 라인을 변경해보십시오 :'_flightId == 0을 반환? NO : YES; ' – rmaddy

+0

나는 이것을 정말로 고마워했다. 그러나 나는 내가 설명했던 문제의 배경에 관심이있다. – freshking

+1

아마도 오버 플로우 문제 일 것입니다. 'BOOL'은 단지'signed char'입니다. long long을 signed char로 밀어 넣으면 오버플로가 발생합니다. – rmaddy

답변

1

BOOL은 단지 8 비트 정수 (char)로 정의되어 있으므로 long long을 반환하면이 하위 8 비트가 나타납니다. 92559104 값은 0x5845700입니다. 보시다시피 LS 8 비트가 모두 0으로 설정되어 있습니다.

예를 들어

return _flightId != 0; 

또는 관용적 :

return !!_flightId; 
+1

그 답입니다. 감사! – freshking