2012-05-18 12 views
5

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?

+0

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

Antwort

5

Es ist möglich, dass ein short int die gleiche Größe wie ein int zu sein, also ein unsigned short int konnte nicht zu einem int gefördert werden, zum Beispiel. Dies ist bei Ihrem Compiler nicht der Fall.

Verwandte Themen