Was ist der Unterschied zwischen uint16_t und unsigned short int bei einem 64-Bit-Prozessor?

Lesezeit: 3 Minuten

Benutzeravatar von Chinna
China

Ich bin gekommen, um eine Variable vom Typ zu verwenden uint16_t, aber ich kann diesen Datentyp aufgrund meiner Projektbeschränkungen nicht verwenden. Ist es möglich, zu unsigned short int Anstatt von uint16_t? Ich kenne den Unterschied zwischen den beiden nicht. Könnte jemand bitte klären?

  • Haben Sie versucht, nach typedef unsigned short uint16_t zu suchen?

    – Ismeet

    17. Juli 2013 um 7:14 Uhr


  • @Ishmeet Ich habe im Falle eines 64-Bit-Prozessors keine Informationen gefunden

    – China

    17. Juli 2013 um 7:14 Uhr

  • @Ishmeet Ich portiere Code von einem Prozessor auf einen anderen und habe ihn gefunden

    – China

    17. Juli 2013 um 7:18 Uhr

  • Dass der Prozessor 64 Bit ist, ist nicht genug Information, wichtig ist die ABI, die für Ihre Plattform implementiert ist. Dies ist von Prozessor zu Prozessor und von Betriebssystem zu Betriebssystem unterschiedlich. Und tatsächlich ist die Kategorisierung eines Prozessors als 64-Bit (oder nicht) eine zu starke Vereinfachung, die für diese Art von Fragen nicht sehr hilfreich ist.

    – Jens Gustedt

    17. Juli 2013 um 7:18 Uhr

  • Ich habe einmal Programme für eine Plattform geschrieben, deren Compiler es nicht gab uintXX_t. Also habe ich sie selbst geschrieben. Das hat geholfen, obwohl es nicht sehr sauber war (weiß nicht, ob ich das nach den C-Normen darf).

    – glglgl

    17. Juli 2013 um 8:34 Uhr

Benutzeravatar von Yu Hao
Yu Hao

uint16_t ist eine vorzeichenlose 16-Bit-Ganzzahl.

unsigned short int ist eine kurze ganze Zahl ohne Vorzeichen, aber die Größe ist implementierungsabhängig. Der Standard sagt nur, dass es mindestens 16-Bit ist (d. h. Mindestwert von UINT_MAX ist 65535). In der Praxis ist es meist 16-Bit, aber das kann man nicht als Garantie nehmen.

Notiz:

  1. Wenn Sie eine portable 16-Bit-Ganzzahl ohne Vorzeichen wünschen, verwenden Sie uint16_t.
  2. inttypes.h und stdint.h werden beide in C99 eingeführt. Wenn Sie C89 verwenden, definieren Sie Ihren eigenen Typ.
  3. uint16_t kann in bestimmten Implementierungen nicht bereitgestellt werden (siehe Referenz unten), aber unsigned short int ist immer verfügbar.

Referenz: C11 (ISO/IEC 9899:201x) §7.20 Ganzzahlige Typen

Für jeden hierin beschriebenen Typ, den die Implementierung bereitstellt, soll dieser Typedef-Name deklariert und die zugehörigen Makros definiert werden. Umgekehrt soll für jeden hierin beschriebenen Typ, den die Implementierung nicht bereitstellt, weder der Typedef-Name deklariert noch die zugehörigen Makros definiert werden. Eine Implementierung muss die als „erforderlich“ beschriebenen Typen bereitstellen, muss aber keine der anderen bereitstellen (als „optional“ beschrieben).

  • Im Prinzip können einige Implementierungen (und ABI) Nicht-16-Bit-Shorts haben. In der Praxis haben alle üblichen 64-Bit-Prozessoren und ABI (x86-64, Sparc 64, PowerPC 64, Aarch 64) 16-Bit-Shorts. Aber int-s sind normalerweise 32 Bit.

    – Basile Starynkevitch

    17. Juli 2013 um 7:17 Uhr


  • Auch ich habe noch nie einen 64-Bit-Rechner gesehen, der 32-Bit-Shorts hatte.

    – Casey

    17. Juli 2013 um 7:17 Uhr


  • Betrachten Sie als Randnotiz eine Implementierung, in der short ints sind größer als 16 Bit und CHAR_BIT 8 ist (was fast immer der Fall ist), dann wäre es einfach unmöglich definieren uint16_tAFAICT.

    – mtvec

    17. Juli 2013 um 7:50 Uhr

  • @Job Es ist nicht unmöglich. Der Compiler könnte (als Erweiterung) so etwas wie bereitstellen __uint16_tund stdint.h enthalten könnte typedef __uint16_t uint16_t.

    – glglgl

    17. Juli 2013 um 8:32 Uhr


  • @glglgl: Du hast Recht, ich habe nicht an erweiterte Integer-Typen gedacht.

    – mtvec

    17. Juli 2013 um 9:03 Uhr

Benutzeravatar von Scott Chamberlain
Scott Chamberlain

uint16_t ist garantiert eine vorzeichenlose ganze Zahl, die 16 Bit groß ist

unsigned short int ist garantiert unsigniert short integerwo short integer wird durch den Compiler (und möglicherweise Compiler-Flags) definiert, den Sie derzeit verwenden. Für die meisten Compiler für x86-Hardware a short integer ist 16 Bit groß.

Beachten Sie auch, dass pro dem ANSI-C-Standard nur die minimale Größe von 16 Bit ist definiert, die maximale Größe liegt beim Entwickler des Compilers

Minimale Typenbeschränkungen

Jeder Compiler, der dem Standard entspricht, muss auch die folgenden Einschränkungen in Bezug auf den Wertebereich einhalten, den ein bestimmter Typ akzeptieren kann. Beachten Sie, dass dies niedrigere Grenzwerte sind: Eine Implementierung kann einige oder alle dieser Grenzwerte überschreiten. Beachten Sie auch, dass der Mindestbereich für ein Zeichen davon abhängt, ob ein Zeichen als signiert oder nicht signiert betrachtet wird.

Geben Sie Mindestbereich ein

signed char     -127 to +127
unsigned char      0 to 255
short int     -32767 to +32767
unsigned short int 0 to 65535

1393470cookie-checkWas ist der Unterschied zwischen uint16_t und unsigned short int bei einem 64-Bit-Prozessor?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy