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.