web-dev-qa-db-de.com

Was ist der Unterschied zwischen "short int" und "int" in C?

Wie unterscheidet sich short int (oder short) und int in C? Sie haben die gleiche Größe und Reichweite. Wenn sie im Wesentlichen gleich sind, wozu werden zwei Datentypen verwendet?

18

Sie können haben die gleiche Größe, aber es ist garantiert, dass int gleich oder größer als short int ist.

23
MByD

In der Theorie/nach dem C-Standard könnten sie jede Größe haben, solange short <= int.

In der realen Welt werden so die Größen implementiert.

CPU             short   int
8 bit           16      16
16 bit          16      16
32 bit          16      32
64 bit          16      32
19
Lundin

Verlassen Sie sich niemals darauf, dass ein Datentyp eine bestimmte Größe in C ist. Überprüfen Sie im Zweifelsfall immer die Grenzen in limits.h.

3
Robbie Dee

C99 N1256 Standardentwurf

Alles, was wir jetzt sicher sind, ist:

2 <= sizeof(short) <= sizeof(int)

5.2.4.2.1 Größen von Ganzzahl-Typen <limits.h> gibt die Mindestgrößen an:

1 [...] Ihre implementierungsdefinierten Werte müssen den angegebenen Werten (Absolutwert) gleich oder größer sein als [...]

  • UCHAR_MAX 255 // 2 8 - 1
  • USHRT_MAX 65535 // 2 16 - 1
  • UINT_MAX 65535 // 2 16 - 1
  • ULONG_MAX 4294967295 // 2 32 - 1
  • ULLONG_MAX 18446744073709551615 // 2 64 - 1

6.2.5 Typen sagt dann:

8 Für zwei beliebige Integer-Typen mit demselben Vorzeichen und unterschiedlichem Integer-Umsetzungsrang (siehe 6.3.1.1) ist der Wertebereich des Typs mit einem kleineren Integer-Konvertierungsrang eine Teilbereich der Werte des anderen Typs.

und 6.3.1.1 Boolean, Zeichen und Ganzzahlen bestimmt die relativen Konvertierungsstufen:

1 Jeder Integer-Typ hat einen Integer-Conversion-Rang, der wie folgt definiert ist:

  • Der Rang von Long Long Int ist größer als der Rang von Long Int, der ist größer als der Rang von int, der größer ist als der Rang von short int, der größer ist als der Rang eines unterzeichneten Zeichens.
  • Der Rang eines beliebigen vorzeichenlosen Integer-Typs entspricht dem Rang des entsprechenden Gegebenenfalls vorzeichenbehafteter Integer-Typ.
  • Für alle ganzzahligen Typen T1, T2 und T3 haben, wenn T1 einen höheren Rang als T2 hat, und T2 einen höheren Rang als T3, dann hat T1 einen höheren Rang als T3

Das hängt vom System ab. Einige Betriebssysteme haben für beide Typen nicht die gleiche Länge.

1
YoyoS

"Eine kurze Ganzzahl in einer Programmiersprache kann eine andere Größe haben In einer anderen Sprache oder auf einem anderen Prozessor. In einigen Sprachen Diese Größe ist plattformübergreifend festgelegt, während in anderen In einigen Sprachen existiert dieser Datentyp nicht bei All. "

Quelle

0
Ljdawson

Ich habe heute an demselben gearbeitet. Mein Fazit ist, dass es von der Word-Länge der Rechnerarchitektur abhängt, auf der Ihr Programm ausgeführt wird. Wie in der Dokumentation zu C99 limits.h.

/* Minimum and maximum values a `signed short int' can hold.  */
#  define SHRT_MIN  (-32768)
#  define SHRT_MAX  32767

/* Maximum value an `unsigned short int' can hold.  (Minimum is 0.)  */
#  define USHRT_MAX 65535

/* Minimum and maximum values a `signed int' can hold.  */
#  define INT_MIN   (-INT_MAX - 1)
#  define INT_MAX   2147483647

/* Maximum value an `unsigned int' can hold.  (Minimum is 0.)  */
#  define UINT_MAX  4294967295U

/* Minimum and maximum values a `signed long int' can hold.  */
#  if __WORDSIZE == 64
#   define LONG_MAX 9223372036854775807L
#  else
#   define LONG_MAX 2147483647L
#  endif
#  define LONG_MIN  (-LONG_MAX - 1L)

/* Maximum value an `unsigned long int' can hold.  (Minimum is 0.)  */
#  if __WORDSIZE == 64
#   define ULONG_MAX    18446744073709551615UL
#  else
#   define ULONG_MAX    4294967295UL
#  endif

Lassen Sie mich wissen, ob jemand eine bessere Antwort hat.

0
Mateen Maldar

short und int müssen mindestens 16 Bit sein, long muss mindestens 32 Bit betragen und diese Kurzlänge ist nicht länger als int, also nicht länger als lang. In der Regel ist short 16 Bit, long 32 Bit und int 16 oder 32 Bit.

0
Ajitesh Sinha

Eigentlich hängt alles von Compiler und System ab. Die Grundregel besagt jedoch, dass int niemals kleiner als kurz sein kann und niemals größer als lang sein kann.

kurz <= int <= lang

0
Bharat Sharma