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 ?


  • Mod

    1000011697 mod 215100001 \equiv 1697\ mod\ 2^{15}


  • Mod

    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 🙂


  • Mod

    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 !?


Log in to reply