Rückgabewert von int rand()
-
Hiya,
folgender Code:
#include <iostream> #include <cstdlib> using namespace std; int main() { unsigned int keim; cout << "Zufallsgenerator initialisieren mit: "; cin >> keim; srand(keim); for(int i = 0; i < 10; i++) { cout << "Zufallszahl Nr." << i + 1 << ": " << rand() << endl; } return 0; }
Nun, nach meinem Buch "C++ Lernen und professionell anwenden" sollten hier zahlen zwischen 0 und 32767 rauskommen. -> Aufgrund des Datentyps int von rand().
Jedoch krieg ich folgendes:
bash-2.05b$ ./a.out
Zufallsgenerator initialisieren mit: 10
Zufallszahl Nr.1: 1215069295
Zufallszahl Nr.2: 1311962008
Zufallszahl Nr.3: 1086128678
Zufallszahl Nr.4: 385788725
Zufallszahl Nr.5: 1753820418
Zufallszahl Nr.6: 394002377
Zufallszahl Nr.7: 1255532675
Zufallszahl Nr.8: 906573271
Zufallszahl Nr.9: 54404747
Zufallszahl Nr.10: 679162307Wie kommen diese größeren Zahlen zu stande?
-
dann ist beim g++ RAND_MAX größer als 32767. int kann viel größere zahlen als 32... aufnehmen. Wir sind hier nicht bei Visual Basic.
-
Dein Rechner ist zu neu. Früher (als die Rechner noch 16-bit-Register hatten) hatten Integer meistens noch 2 Byte, ein long 4. Inzwischen haben meistens auch ints 4 byte und fassen dementsprechend mehr. Die Größe ist aber nicht festgelegt, es gilt nur:
sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
und analog
sizeof(float) <= sizeof(double) <= sizeof(long double)
-
Der Buchautor verbreitet da anscheinend "Wahrheiten" aus der 16bit-Zeit. rand liefert Zahlen im Bereich von 0 bis RAND_MAX. RAND_MAX kann natürlich manchmal 32767 sein, muss es aber nicht.
-
Soso, thx
Jetzt wo ihr das erwähnt habt, suchte ich im Buch die Tabelle mit den Datentypen und ihren Wertebereichen. Jedenfalls sind da die Wertebereiche von int für 2 Byte UND für 4 Byte aufgeführt...
Musst ich wohl irgendwie überlesen haben
thx nochma
Edit:
signed int
2 Byte: -32768 bis +32767
4 Byte: -2147483648 bis +2147483647