Overflow

Schreibe eine Schleife in der eine Zahl (Startwert ist 2) mit sich selbst sooft multipliziert wird (also immer hoch 2 genommen), bis es einen overflow gibt. Lass dir jeweils das Ergebnis ausgeben und mache diese Schleife für die Datentypen short, int, unsigned und long.

    #include<iostream>
    using namespace std;

    int main()
    {
        {
            cout<<"short:\n";
            short i=2;
            while(1) {
                short t=i*i;
                if(t<=i) break;
                i=t;
                cout<<i<<"\n";
            }
        }

        {
            cout<<"\nint:\n";
            int i=2;
            while(1) {
                int t=i*i;
                if(t<=i) break;
                i=t;
                cout<<i<<"\n";
            }
        }

        {
            cout<<"\nunsigned:\n";
            unsigned i=2;
            while(1) {
                unsigned t=i*i;
                if(t<=i) break;
                i=t;
                cout<<i<<"\n";
            }
        }

        {
            cout<<"\nlong:\n";
            long i=2;
            while(1) {
                long t=i*i;
                if(t<=i) break;
                i=t;
                cout<<i<<"\n";
            }
        }
    }

Vermutlich wirst du für int, unsigned und long die selbe Ausgabe erhalten haben. Der Grund ist der: auf 32 Bit Systemen wie Linux und Windows ist ein int (2 hoch 32) - 1 groß, das bedeutet, dass 2 hoch 32 gerade nicht mehr hineinpasst. Bei signed int dagegen passt es überhaupt nicht hinein, nicht einmal knapp. Trotzdem ist die Ausgabe die selbe.

top