2012-05-18 15 views
5

Tamsayı tanıtımı açısından, imzalanmış bir tamsayı orijinal türdeki tüm değerleri temsil edemediği durumda ne zaman?Tümleşik tanıtım

K & R, C Programlama Dili, 2. Ed. s. 174

A.6.1 İntegral yükselme

bir karakter, bir kısa tam sayı ya da tam sayı bit alanı, tüm ya da, imza ya da ya da numaralandırma türü bir amacı, bir kullanılabilmektedir Bir tamsayı kullanılabileceği her yerde ifade. Bir int, orijinal türdeki tüm değerleri temsil ederse, o zaman değer int'ye dönüştürülür; aksi halde değer, imzasız int'a dönüştürülür. Bu işlem bütünleyici tanıtım olarak adlandırılır. ,

CHAR_MAX: 127 
UCHAR_MAX: 255 
SHORT_MAX: 32767 
USHORT_MAX: 65535 
INT_MAX: 2147483647 
UINT_MAX: 4294967295 

imzalı int tipi diğer türlerinin herhangi aşan bir konu:

#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; 
} 

sonucudur:

Bu kod benim sistem için tiplerinin sınırlarını gösterir O zaman ne zaman UINT_MAX'a geri dönecekti?

+0

Yeni yazdırdığınız değerler farklı sistemlerde farklı olabilir. Sadece bir garantidir, bir kısa <= int ve bir int <= uzun bir örnektir. Böylece, kısa ve int aynı boyuta sahip olabilir. @ minitech adlı gönderi doğru – guitarflow

cevap

5

bir short int bir int aynı boyutta olması çok mümkündür, bu nedenle unsigned short int örneğin bir int terfi edilemedi. Bu sadece derleyicinizde durum böyle değil.

İlgili konular