Etwas verwundert

SierraX

Well-Known Member
Ihr Programmierprofies kennt ja wahrscheinlich folgenden C-Source-Code (ist ja nicht schwerer als HalloWelt)

Code:
  #include <stdio.h>
  int main()
  {
      printf( "\n char belegt %d Bytes", sizeof( char ));
      printf( "\n int belegt %d Bytes", sizeof( int ));
      printf( "\n short belegt %d Bytes", sizeof( short ));
      printf( "\n long belegt %d Bytes", sizeof( long ));
      printf( "\n unsigned char belegt %d Bytes", sizeof( unsigned char ));
      printf( "\n unsigned int belegt %d Bytes", sizeof( unsigned int ));
      printf( "\n unsigned short belegt %d Bytes", sizeof( unsigned short ));
      printf( "\n unsigned long belegt %d Bytes", sizeof( unsigned long ));
      printf( "\n float belegt %d Bytes", sizeof( float ));
      printf( "\n double belegt %d Bytes\n", sizeof( double ));
      return 0;
  }

Ich hab das gerad auf meinem LapTop (AMD64/OpenBSD) und auf mein Desktop (Athlon/W2K) laufen lassen.

Ich hatte eigentlich angenommen das sich die Speicherwerte von int und von long beim Sprung auf 64 bit erhöhen dabei war es nur der wert von long (respective unsigned long) wlcher jetzt 8 Byte fasst was der Zahl 18446744073709551616 entsprechen müßte.
Ist das OS abhängig ob int = long ist oder Hardware spezifisch? Oder gar nur ne ANSI sache?
Schonmal jemand mit solchen Zahlen in einem eigenen Programm gongliert?
 
Ist das OS abhängig ob int = long ist oder Hardware spezifisch? Oder gar nur ne ANSI sache?
Das ist wohl am ehesten Compiler abhängig. Die einzige Plattform, auf der der Compiler ein long mit 64 bit zur Verfügung stellt und auf der ich gearbeitet habe, war die Alpha. Auf Sparc und auch x86 ist "long" 32 bit und erst "long long" 64 bit lang.

Der ANSI-C Standard gibt als Mindestlänge soweit ich weiss für long "mindestens 32 bit" vor.

In Java ist das besser gelöst, da ist byte = 8 bit, short = 16 bit, int = 32 bit und long = 64 bit auf *allen* Plattformen.
 
Zurück
Oben