wertebereiche auf verschiedenen systemen
-
Hallo,
ich habe ein paar kleine fragen:
int hat ja einen variablen (systemabhängigen) wertebereich bzw. int werden unterschiedlich viele bit auf verschiedenen betriebssystemen zugewiesen. wie genau bzw wovon genau hängt das ab?! ich habe nämlich vista 64bit auf einem quadcore 6600 laufen, aber folgendes programm schmeißt mir für mein int nur eine größe von 4 byte aus:
#include <stdio.h>
#include <limits.h>int main ()
{
printf("Int-Groesse: %d Byte\n",sizeof(int));
printf("Wertebereich von %d bis %d\n\n",INT_MIN,INT_MAX);system("PAUSE");
return 0;}
wieso nur 4 byte? ich hätte mit 8 gerechnet...wie schaut das außerdem mit short und long bzw. double und float aus? haben die immer einen festen wert an bit zugeschrieben, oder kann der auch auf verschiedenen systemen variieren? danke im voraus!
grüße
-
Alle bis auf
char
können variieren. Auf diesem 64-bit System sind wahrscheinlich 4 Bytes fürint
vorgesehen, um überhaupt einen 32-bit Integer zur Verfügung zu stellen. Versuch doch mallong
zum Vergleich.
-
long hat auch 4 byte...short = 2byte, float = 4 byte und double hat 8 byte
ich habe im buch "c von a bis z" jetzt folgendes gefunden:
Größe von char 1 Byte = 8 Bit
Größe von short 2 Byte = 16 Bit
Größe von int 2 oder 4 Byte = 16 Bit oder 32 Bit
Größe von long 4 Byte = 32 Bit
Größe von float 4 Byte = 32 Bit
Größe von double 8 Byte = 64 Bit
Größe von long double 10 Byte = 80 Bitso wie ich das verstanden habe, gilt das so immer...oder stimmt das nicht?^^ bin, zugegeben, etwas verwirrt!
-
Nö, char kann auch 10 Byte sein, es muss nur die kleinste Einheit sein.
Es kann auch jeder Datentyp 10 Byte sein. Was es gibt sind Mindestangaben an Zahlen, die von z.B. einem int dargestellt werden können müssen.
-
TyRoXx schrieb:
Alle bis auf
char
können variieren.char ja auch. inner iso-spec steht irgendwo, dass in 'char' mindestens alle zeichen des zeichensatzes des zielsystems passen müssen. grösser darf 'char' aber auch sein.
chmbw schrieb:
long hat auch 4 byte...
bei einem compiler für 'ne 64-bit CPU? wirf ihn weg!
-
erstmal danke für die antworten.
aber genau verstanden wovon die bit-anzahl eines typs abhängt hab ich leider noch nicht genau. ich bin jetzt soweit, dass:
- Die CPU eine wichtige rolle spielt
- Das betriebssystem
- der compiler
wenn ich jetzt aber weiß, dass mein system A ein 32bit betriebssystem und entsprechend halt auch eine 32 bit cpu hat, system B aber ein 64bit betriebssystem und eine 64 bit cpu, wie komm ich dann von vornherein an die information wie groß int, float und die ganzen anderen sind? oder geht das nur indem ich mich an den entsprechenden rechner setze und limits.h etc. auslese?
-
chmbw schrieb:
wie komm ich dann von vornherein an die information wie groß int, float und die ganzen anderen sind? oder geht das nur indem ich mich an den entsprechenden rechner setze und limits.h etc. auslese?
Es gibt ja noch den sizeof Operator.
-
Das hängt alles vom Compiler und der Architektur ab. Auf x86_64 ist int auch 4byte groß, weil man so das portieren von legacy code einfacher machen will.
Wenn du Typen mit einer bestimmten Größe brauchst, dann schau dir mal stdint.h an. Da gibt es dann typedefs, wie int32_t etc.
chmbw schrieb:
ich habe im buch "c von a bis z" jetzt folgendes gefunden:
[...]
so wie ich das verstanden habe, gilt das so immer...oder stimmt das nicht?^^ bin, zugegeben, etwas verwirrt!
Nein, das gilt nicht immer. Du kannst dir im Grunde nicht einmal sicher sein, dass ein Byte 8 Bit hat. CHAR_BIT gibt die Anzahl der Bits in einem Byte an.
btw. das Buch ist ohnehin sehr umstritten, da es eben solche missverständliche/falsche Aussagen enthält.