2015-05-15 2 views
0

Этот код должен напечатать ложные к консоли, но распечатать правданеправильный логический результат в случае заявление

NSMutableArray *data = [[NSMutableArray alloc]init]; 

UILabel *label = [[UILabel alloc] init]; 
label.tag = 7; 

if(label.tag <= (data.count - 1)) { 
    NSLog(@"true"); 
} else { 
    NSLog(@"false"); 
} 

кто-нибудь может объяснить это?

+1

Что такое data.count значение? можете ли вы показать значение, хранящееся в массиве данных? – iPhone

+1

Используйте ' trojanfoe

+0

Не похоже, что вы уже пытались проверить свои значения внутри отладчика, иначе вы бы поняли, почему это не работает. –

ответ

3

data.count is 0, но это целое число без знака (NSUInteger).

(data.count - 1) который 0 - 1 в этом случае не будет равен -1, потому что целое число без знака. Это будет максимальное целое число (4294967295). Мы называем это целым числом underflow.

Вы можете исправить это легко

label.tag + 1 <= data.count 

С целого числа без знака, вы всегда должны заботиться с вычитанием. Другой способ исправить это с помощью бросание в знаковое целое число:

label.tag <= ((NSInteger) data.count) - 1 
Смежные вопросы