Auf meinem 64-Bit System beobachte ich etwas merkwürdiges mit dem Datentyp unsigned long.
Dieser Datentyp ist allgemein bekannt ein 32-Bit Datentyp.
Schaut Euch bitte mal folgendes Miniprogramm an:
Code: Alles auswählen
#include <stdio.h>
int main (void)
{
unsigned long val;
unsigned char zaehler;
val = (unsigned long)(1);
/* Schiebe Wert von <val> 32-mal nach links */
for (zaehler=(unsigned char)(0); zaehler<(unsigned char)(32); zaehler++) val *= (unsigned long)(2);
/* Wird bei einer 32-Bit Variable der Wert 1 32-mal nach links geschoben, muss das Ergebnis 0 sein */
if (val == (unsigned long)(0))
{
printf ("OK\n");
} else
{
printf ("FEHLER\nWert ist %lu\n",val);
}
return (0);
}
Diese Schiebeoperation findet innerhalb einer 32-Bit Variable statt.
Also ist das erwartete Ergebnis 0.
Bei mir ist aber das Ergebnis 4294967296.
Diesen Wert kann eine 32-Bit Variable nicht annehmen.
Meine Vermutung ist, dass der GCC einen unsigned int anstelle eines unsigned long nimmt.
Kann dies jemand bestätigen?
Gruß
Bernhard