Konvertieren von unsigned long int, signed int und Umgekehrt
Ich gerne weitergeben möchte einen signed int zu gsl_rng_uniform_int (const gsl_rng * r, unsigned long int n)
. Die signed int, die ich bin übergeben wird, größer als oder gleich null ist. Die Funktion gibt eine Zahl zwischen 0
und n
, also, wenn ich pass es eine positive signed int, es wird etwas von dem zurückgeben, die in den Bereich eines signed int. Dann möchte ich speichern den Rückgabewert in ein signed int. Was ist der sauberste Weg, dies zu tun mit der offensichtlichen erwarteten Verhalten? Ich bin auf einem 64-bit-compiler für 64-bit-Linux-Maschine.
Update
Sorry, Leute. Bitte ignorieren Sie. Das problem mit meinem code war eigentlich woanders. Ich fehlinterpretiert die Ausgabe von gdb
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Starten mit:
Wahrscheinlich wird der compiler warnen, dass eine gefährliche Verengung Konvertierung, so zu ändern:
Oder für die Sicherheit:
Diese Zeilen werden könnten, eingewickelt in eine helper-Funktion:
In jedem Fall testen Sie Ihre Eingabe in der Regel mehr als nützlich, testen Sie die Ausgabe von Funktionen, auf die Sie sich verlassen, und wenn Sie Vertrauen
gsl_rng_uniform_int
dann testen Sie die Eingabe ist ausreichend.[Edit: wow, Google Indizes SO wirklich aggressiv. Ich habe gerade gesucht, um zu überprüfen, dass
gsl_rng_uniform_signed
nicht bereits eine Funktion, und fand mich.]Wenn die Funktion erwartet eine
unsigned long
können Sie ohne problem einenunsigned long
,unsigned int
,unsigned short
undunsigned char
, der standard garantiert, dass.Wenn Sie an einem
signed
aber negativeint
, Sie wird nicht erhalten die gewünschten Ergebnisse, da wird es auch ausgewertet werden, um eine sehr große int durch die Funktion.Ist der beste Weg, um zu überprüfen, ob es die signierte int
>= 0
vor der übergabe.Ich hoffe, dass ich deine Frage verstanden richtig.