Short int oder int



  • Hey Leute ich wollte fragen was ich verwenden sollte, short int oder int für deklarationen von variablen/funktion wo ich mir sicher bin das es nur mengen unter 65... haben, für ein Programm womit ich sowenig Arbeitsspeicher wie möglich verbrauchen würde...



  • signed char oder unsigned char je nachdem, wie weit du
    unter 65 bleibst.


  • Mod

    int, außer du brauchst ein paar Milliarden Werte dieser Art.



  • SeppJ wieso wenn ich fragen darf?
    Ich weiss das mein Wert unter 32,767 ist und short ja um die hälfte weniger speicher benötigt. Warum sollte ich dann trotzdem int verwenden?


  • Mod

    Weil Speicherverbrauch nahezu völlig egal ist. Und absolut egal, wenn es wirklich nur um wenige Bytes Unterschied geht. int ist aber im Zweifel schneller und das ist schon noch relevant.

    Wenn es sich um eine automatische Variable oder um einen Teil einer größeren Klasse handelt, dann stehen die Chancen gut, dass es ohnehin gar keinen Unterschied macht, weil ein short dann auch gerne als ein zurechtgestutzter int behandelt wird. Das heißt, man hat sowieso einen ganzen int, nutzt aber nur einen Teil davon. Das liegt da dran, weil, wie gesagt, ein int effizienter von der Rechenzeit ist.

    Letzterer Absatz gilt nicht mehr, wenn man ein Array oder sonstiges Aggregat mehrerer shorts/chars hat. Dann ist garantiert, dass diese direkt hintereinander gespeichert werden, ohne Lücken.



  • C++Anfänger123 schrieb:

    unter 65... haben, für ein Programm womit ich sowenig Arbeitsspeicher wie möglich verbrauchen würde...

    Wenn das ne strikte Vorgabe ist (z.B. für ne Hausübung o.Ä.), dann wohl ((un)signed) char.
    Wobei du bei denen aufpassen musst, die werden von einigen Teilen der Standard-Library (z.B. iostreams) als Zeichencodes behandelt statt als Zahlen.

    Ansonsten das was SeppJ geschrieben hat.
    Nicht unbedingt weil es von der Geschwindigkeit her en Unterschied machen würde (macht es AFAIK auf den meisten Systemen nämlich nicht), sondern "einfach so" -- weil int halt ein sinnvolles Default ist wenn es keinen guten Grund gibt was anderes zu verwenden.



  • Wenn Du weisst, dass der Wertebereich nie groesser als 65 wird:

    #include <cstdint>
    
    int8_t valBetweenMinus66AndPlus66; // vorzeichenbehaftet
    uint8_t valFrom0To65; // nur Werte groesser oder gleich 0
    

    SeppJ schrieb:

    Weil Speicherverbrauch nahezu völlig egal ist. Und absolut egal, wenn es wirklich nur um wenige Bytes Unterschied geht. int ist aber im Zweifel schneller und das ist schon noch relevant.

    Stimmt fuer fast alle Plattformen. Ausnahme: 8bit Microcontroller, da spielt Speicherbedarf oft eine Rolle, insbesondere, wenn es um Variablen im RAM geht.



  • Ich denke mit 65... meinte er 65535, also 2^16-1


Anmelden zum Antworten