Warum ist der Wert 1700 ?
-
Hallo,
ich versuche mich gerade an bitfeldern und wundere mich über den Wert der Ausgabe
struct zub { long a : 15; long b : 15; }; // ... zub tmp; tmp.a = 0; tmp.b = 0; std::cout << tmp.a << std::endl; for(int i=0; i<=100000;i++)tmp.a++; std::cout << tmp.a << std::endl;
Warum ist der Wert von tmp.a = 1697 ?
-
-
Der Wert ist implementation-defined (siehe [expr.post.incr]/1). Gängige Compiler werden einfach die MSBs abschnippeln, daher der Wert.
-
danke euch erstmal. Ich versteh die Antworten noch nicht ganz. Scheinbar entsteht ein Überlauf? Ist das richtig?
Aber ich hab doch 15 bit, damit lässt sich doch problemlos die Zahl 100001 darstellen oder nicht?Ich steh auf dem Schlauch, sorry
-
fragender2 schrieb:
Aber ich hab doch 15 bit, damit lässt sich doch problemlos die Zahl 100001 darstellen oder nicht?
Du bräuchtest 17, mit einer Vorzeichen-behafteten Zahl 18.
-
fragender2 schrieb:
Aber ich hab doch 15 bit, damit lässt sich doch problemlos die Zahl 100001 darstellen oder nicht?
Wie kommst du darauf? Wenn man seine 2er Potenzen nicht im Kopf hat einfach mal 2^15 in den Taschenrechner tippen...
-
ah, also es entsteht doch ein Überlauf, richtig? Und deshalb wird die Zahl 1697 ausgespuckt !?