Domanda

Vorrei un ciclo che utilizza un UInt16 (ushort) per scorrere tutti i suoi valori. Tuttavia, questo non lo fa:

for( ushort i = 0; i < UInt16.MaxValue; i++ )
{
    // do something
}

Il problema è che il ciclo si chiuderà quando i == 0xFFFF e non " fare qualcosa " ;. Se cambio l'istruzione 'for' in & Quot; for (ushort i = 0; i & Lt; = UInt16.MaxValue; i ++) & Quot ;, allora diventa un ciclo infinito perché non ottengo mai a 0x10000 perché gli utenti usali vanno solo a 0xFFFF.

Potrei fare 'i' un int e lanciarlo o assegnarlo a una variabile ushort nel loop.

Qualche suggerimento?

È stato utile?

Soluzione

Utilizza un do...while ciclo

ushort i = 0;
do
{
    // do something
} while(i++ < UInt16.MaxValue);

C'è un'interessante discussione sui cicli di test in alto e in basso qui .

Altri suggerimenti

UInt16.MaxValue restituisce 0xffff , non 0x10000. Penso che puoi farlo con un ciclo do / while, come una variazione sulla risposta di burkhard1979.

ushort i = 0;
do {
   ...
} while (++i != 0);

Potresti semplicemente sostituire il per con un ciclo do-while.

ushort i = 0;
do
{
i++;
...
} while(i!=UInt16.MaxValue);

deve essere breve? perché non solo

for(int i = 0;i<=0xFFFF;i++)
{
  //do whatever
}

Supponendo che il tuo codice soffra di un errore off di un errore (il codice corrente, si interrompe poco prima che venga valutato il valore finale. Quindi potrebbe risponderti quanto segue.

Molto semplice, poiché il tuo contatore è un numero intero senza segno a 16 bit, non può avere valori maggiori di 0xffff, poiché quel valore è ancora valido, devi avere un valore che si estende oltre quello come guardia. Tuttavia, l'aggiunta di 1 a 0 in 16 bit si limita a <=>. Come suggerito, usa un ciclo do while (che non ha bisogno di un valore di protezione) o usa un valore più grande per contenere il tuo contatore.

ps. L'uso di variabili a 16 bit su macchine moderne è in realtà meno efficiente rispetto all'utilizzo di variabili a 32 bit poiché non è necessario generare alcun codice di overflow.

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