Wann kann es vorkommen, dass eine vorzeichenbehaftete Ganzzahl nicht alle Werte des Originaltyps in Bezug auf Ganzzahlpromotion darstellen kann?Integrierte Promotion
Aus dem Text K & R, C Programmiersprache, 2. Ed. p. 174
A.6.1 Integral Promotion
Ein Zeichen, eine kurze ganze Zahl ist, oder eine ganze Zahl Bitfeld, alle entweder unterzeichnet oder nicht, oder ein Objekt von Aufzählungstyp, kann in einen verwendet werden, Ausdruck, wo immer eine ganze Zahl verwendet werden kann. Wenn ein int alle Werte des ursprünglichen Typs darstellen kann, wird der Wert in int konvertiert; Andernfalls wird der Wert in unsigned int konvertiert. Dieser Prozess heißt integral promotion.
Dieser Code zeigt die Grenzen der Arten für mein System:
#include <stdio.h>
#include <limits.h>
int main(void)
{
printf("CHAR_MAX: %i\n", CHAR_MAX);
printf("UCHAR_MAX: %i\n", UCHAR_MAX);
printf("SHORT_MAX: %i\n", SHRT_MAX);
printf("USHORT_MAX: %i\n", USHRT_MAX);
printf("INT_MAX: %i\n", INT_MAX);
printf("UINT_MAX: %u\n", UINT_MAX);
return 0;
}
Das Ergebnis ist:
CHAR_MAX: 127
UCHAR_MAX: 255
SHORT_MAX: 32767
USHORT_MAX: 65535
INT_MAX: 2147483647
UINT_MAX: 4294967295
Der int-Typ viel größer als alle anderen Arten unterzeichnet ist, wann würde es jemals wieder zu UINT_MAX fallen?
Die Werte, die Sie gerade gedruckt haben, können auf verschiedenen Systemen unterschiedlich sein. Es ist nur garantiert, dass ein short zum Beispiel <= int und ein int ist <= a long. Somit können short und int dieselbe Größe haben. @ minitechs Beitrag ist richtig – guitarflow