Frage zu den Datentypen int32_t, uint32_t, uint8_t



  • Hallo, ich hab in dieser ( https://docs.microsoft.com/de-de/cpp/c-runtime-library/standard-types ) Dokumentation folgendes gesehen. Dort ist z.b. int32_t dasselbe wie int.
    Und uint8_t ist dasselbe wie unsigned char.

    Hat das irgendeinen näheren Sinn das Microsoft den Datentypen so Spezialnamen wie z.b. uint8_t gibt anstatt einfach unsigned char?



  • Weil diese datentypen (xx_t) vom standard definiert sind, dass es diese vom compiler bereitgestellt werden müssen.
    Ob der compiler jetzt direkt diese typen als native typen implementiert oder einfach nur per typdef auf bekannte nativen typen mit der passenden anzahl an bits ist AFAIK nicht vom standard vorgegeben.



  • Die Größe von int ist vom Standard nur soweit geregelt, dass ein Mindestbereich vorgegeben wird. Der geht von -32767 bis 32767.
    dafür reichen 16 Bit.

    Bei int32_t kannst sicher sein, dass du 32 Bit bekommst.

    Flexibler sind aber z.B. int_least32_t oder int_fast32_t
    Da kann der Compiler auch größere/schnellere Datentypen nehmen.
    (Es gibt auch Maschinen, die nicht auf einer 8-Bit Basis arbeiten. Z.B. Digitale-Signalprozessoren )

    Das dient der portabilität vom Code.



  • Ein Typedef der mit "int" beginnt, ist immer vorzeichenbehaftet. Die Zahl danach gibt die Anzahl der Bits an.
    Steht statt "int" dort "uint", kann die Variable nur positive Werte annehmen (auch wenn etwas Negatives zugewiesen wird). Dafür kann ein uint etwa doppelt so viele positive Werte annehmen, als ein int gleicher Bitbreite.


Log in to reply