2016-04-06 10 views
0

Irgendwann arc4random() gibt negative Zahl auch in Objective C.arc4random() gibt negative Zahl in iOS

Mein Code ist wie folgt:

Versuchen 1:

long ii = arc4random(); 

2 Versuchen:

int i = arc4random(); 

Wie kann ich nur positive Zufallszahlen erhalten?

Danke,

Antwort

4

Nein, es immer positiv ist, da es eine nicht signierte 32-Bit-Integer (manpage) zurückgibt:

u_int32_t arc4random(void); 

Sie es als 'Signed Integer behandeln, die nicht korrekt ist.

+0

Thank s viel für deine Antwort. Behandle es dann als vorzeichenlose Ganzzahl? – user2526811

+0

@ user2526811 Ja; Speichern Sie es in einem 'unsigned' oder' NSUInteger' und stellen Sie sicher, dass Sie unter anderem das Format '% u' mit' [NSString stringWithFormat:] 'verwenden. – trojanfoe

+0

'unsigned long i = arc4random();' ist es gut? – user2526811

0

Sie sollten die arc4random_uniform() Funktion verwenden. Dies ist die am häufigsten verwendete Zufallsfunktion.

arc4random_uniform() Funktion

Gibt eine Zufallszahl zwischen 0 und dem eingefügten Parameter minus 1. Zum Beispiel arc4random_uniform (3) 0 zurückgeben kann, 1 oder 2, aber nicht 3.

Beispiel

u_int32_t randomPositiveNo = arc4random_uniform(5) + 1; //to get the range 1 - 5 
+0

Warum 'int'? 'arc4random_uniform()' gibt außerdem eine vorzeichenlose 32-Bit-Ganzzahl zurück, und das OP wird genau die gleichen Probleme erleiden. Wie also löst diese Antwort sie? – trojanfoe

+0

@trojanfoe Fertig !! stimme mit dem Rückgabetyp überein, den du vorgeschlagen hast, ich war besorgt über die Methode, also verpasste ich einfach ** u_int32_t **, auf jeden Fall aktualisiert. – swiftBoy