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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top