Datentypen, byte und bites



  • Hi,

    in meinen Büchern steht, dass daten vom typ char mit 1 byte speicherplatz belegt werden. Und mit int, was soviel wie 2 bytes oder 16 bits entspricht, können zahlen im bereich von -32768 - +32767 dargestellt werden. Was meint man damit? Wenn ich jetzt int als datentyp verwende, und dem programm sage, dass es mir die zahl 46573 auf der console ausgeben soll, dass das dann nicht funktioniert? Versteh ich das so richtig? Das ich dann immer den Datentyp an die Zahl anpassen muss, die ich ausgeben will? UNd was ist wenn ich dann Zahlen auslesen lassen will, die im Bereich von int und long bzw. short liegen? Kommt dann ein Error? -.-
    Bitte mal um AUfklärung

    Danke schonmal im Vorraus



  • Der C Sprachstandard definiert Datentypen char,short,int,long jeweils vorzeichenbehaftet oder nicht und dann noch float,double und long double.
    Der C Sprachstandard definiert weiterhin Grenzen für diese numerischen Datentypen, dein ANSI C Compiler definiert konkrete Werte für diese Grenzen, z.B.
    INT_MAX und INT_MIN für int, UINT_MAX für unsigned int, USHRT_MAX für unsigned short usw.
    Bis auf sizeof(char)==1 legt der Sprachstandard keinerlei weitere Größenangaben fest, du bist selbst für Über/Unterlaufbehandlung verantwortlich.



  • Inzwischen sollte Integer meist 4 Bytes groß sein und short weiterhin 2 Bytes (Plattformabhängig).

    Ein short mit 2 Bytes kann nur zwischen -32768 - +32767 darstellen, korrekt. Will man nun direkt eine größere Zahl reinschreiben sollte der Kompiler schon rummeckern (auch nicht unbedingt). Machen wir aber mal folgendes. Wir speichern die Zahl 32767 in einer Variable x. Im Speicher dürfte nun folgendes dafür stehen:

    0111 1111 1111 1111

    Addieren wir nun 1 hinzu, steht dort folgendes:

    1000 0000 0000 0000

    und das entspricht der Darstellung der Zahl -32768.

    Du solltest also aufpassen welchen Datentypen du für deine Zahlen wählst. Meistens reicht Integer (mit 4 Bytes) an sich schon vollkommen aus.

    Wenn du eine Zahl benötigst, die zwischen short und int liegt, dann nimmst du dafür einfach den Integer Datentypen, da short die Zahl nicht darstellen kann, Integer aber schon. Ähnliches wenn die Zahl größer ist als der maximale Integer-Wert, dann nimmst du einfach long dafür.



  • @Windassel

    Jep fast!

    Das was du hier beschreibst ist aber noch 16Bit.
    Auf dem 32Bit Systemen ist ein

    char -> 1 byte

    short -> 2 byte

    float -> 4 byte

    double -> 8 byte

    long double -> 8 byte

    int -> 4 byte

    long -> 4 byte

    long long -> 8 byte



  • also gebt Ihr mir alle soweit Recht? Außer das ich mich mit den Bytes und Bites ein wenig vertan habe. Aber int etc. verwende ich dann doch nur wenn ich mit Zahlen hantiere? Warum schreib ich hier denn dann auch int? Kann ich doch eigentlich weglassen? Da int ja nur ganze Zahlen repräsentiert kann int doch hier wegfallen?

    int main()
    {
    printf("\n \n \n\n\n");
    printf("Das ist ein Viereck aus ");
    printf("Sternchen, oder et");
    printf("wa nicht?\n");
    printf("E\nN\nD\nE\nENDE\n\n");
    printf("E-->igentlich\n");
    printf("N-->eger\n");
    printf("D-->uerre\n");
    printf("L-->icht\n");
    printf("I-->ch\n");
    printf("C-->hromoson\n");
    printf("H-->oden\n\n");
    printf("F-->eiern\n");
    printf("E-->ier\n");
    printf("R-->eiten\n");
    printf("T-->iger\n");
    printf("I--gel\n");
    printf("G-->iraffe\n\n");
    printf("Und das Loesungswort lautet...\n\n");
    printf("ENDLICCH FERTIG\n\n");

    system("PAUSE");
    return 0;
    }



  • Das einzige "int", was ich dort sehe, ist das von der main.

    int main(void)
    {
    }
    

    ist eine Funktion, das "int" bezieht sich dabei auf den Rückgabewert der Funktion. Das heißt, die "main"-Funktion kann im Prinzip einen Integer-Wert zurueckgeben. Wenn ich mich recht erinner schreibt man in C auch das "return 0" mit hin:

    int main(void)
    {
    return 0;
    }
    

    Hier bezieht sich das "int" also auf das, was die Anweisung "return 0" zurueckgeben soll, also auf die 0. Für einen Einsteiger sollte das erstmal irrelevant sein, was Funktionen sind erfährst du noch früh genug. Und dann verstehst du auch was das "int" dort soll.



  • okay, also merk ich mir. int bezieht sich erstma auf die zahlen. ghuuuuuut,thx



  • -lowbyte- schrieb:

    Auf dem 32Bit Systemen ist ein

    char -> 1 byte

    short -> 2 byte

    float -> 4 byte

    double -> 8 byte

    long double -> 8 byte

    int -> 4 byte

    long -> 4 byte

    long long -> 8 byte

    Das ist natürlich Unsinn.
    Oben Genanntes kann für einen 32 Bit Compiler gelten, für eine andere Version desselben Compilers braucht das nicht zu gelten, schon gar nicht für andere 32 Compiler derselben Plattform und erst recht nicht für 32 Bit Compiler anderer Plattformen.
    Ich habe hier einen 32 Bit ANSI C Compiler, wo sizeof(long double)==12 ist, und jetzt?
    Auch ist long long ist kein C89.
    Halte dich an den Standard wenn er was für deine Zwecke anbietet und treffe nicht irgendwelche Annahmen, von denen du glaubst, dass deine aktuellen Beobachtungen Standard sind.



  • Wutz schrieb:

    -lowbyte- schrieb:

    Auf dem 32Bit Systemen ist ein

    char -> 1 byte

    short -> 2 byte

    float -> 4 byte

    double -> 8 byte

    long double -> 8 byte

    int -> 4 byte

    long -> 4 byte

    long long -> 8 byte

    Das ist natürlich Unsinn.
    Oben Genanntes kann für einen 32 Bit Compiler gelten, für eine andere Version desselben Compilers braucht das nicht zu gelten, schon gar nicht für andere 32 Compiler derselben Plattform und erst recht nicht für 32 Bit Compiler anderer Plattformen.
    Ich habe hier einen 32 Bit ANSI C Compiler, wo sizeof(long double)==12 ist, und jetzt?
    Auch ist long long ist kein C89.
    Halte dich an den Standard wenn er was für deine Zwecke anbietet und treffe nicht irgendwelche Annahmen, von denen du glaubst, dass deine aktuellen Beobachtungen Standard sind.

    Hast natürlich Recht! War etwas ungenau. Das dies so ist weis ich schon.
    long long ist seit C99 standardisiert soweit ich weis.


Anmelden zum Antworten