Nsuinteger in confusione di loop invertita?
-
21-12-2019 - |
Domanda
Mi chiedo se qualcuno possa spiegare qualcosa, ho installato un loop dove volevo contare indietro da 10 a 0:
for(NSUInteger index = 10; index >= 0; index--) {
NSLog(@"INDEX: %ld", (long)index);
}
.
Questo ciclo corre per sempre, non si ferma a 0, ma continua a entrare in numeri negativi.Quando ho notato questo ho cambiato il mio codice in:
for(NSInteger index = 10; index >= 0; index--) {
NSLog(@"INDEX: %ld", (long)index);
}
.
Quanto sopra funziona bene, ma sono curioso, perché il primo esempio non funziona come i numeri generati sono tutti numeri interi senza firma?
Soluzione
Un tipo senza segno non può "continuare a numeri negativi".Dopo l'iterazione quando indice= 0, indice-- diventa 0xffffffff, che è ancora più di zero.Facile errore da fare, l'ho fatto io stesso.
L'analizzatore statico ti avverterà effettivamente su questo ("Indice di condizione>= 0 è sempre vero" o come tale.) Consiglio vivamente di impostarlo per eseguire automaticamente su Build di debug.
Altri suggerimenti
Nota che un Nsuinteger è sempre>= 0, per conseguenza, la condizione del ciclo sarà sempre vero.