2012-05-18 30 views
5

Khi nào thì trường hợp một số nguyên đã ký không thể đại diện cho tất cả các giá trị của loại ban đầu liên quan đến quảng bá số nguyên?Xúc tiến tích hợp

Từ văn bản K & R, Ngôn ngữ lập trình C, 2nd Ed. p. 174

A.6.1 Integral Xúc tiến

Một nhân vật, một số nguyên ngắn, hoặc một chút-trường số nguyên, tất cả các loại ký hay không, hoặc một đối tượng kiểu liệt kê, có thể được sử dụng trong một biểu hiện ở bất kỳ nơi nào một số nguyên có thể được sử dụng. Nếu int có thể đại diện cho tất cả các giá trị của loại gốc, thì giá trị được chuyển đổi thành int; nếu không giá trị được chuyển thành int unsigned int. Quá trình này được gọi là quảng cáo tích hợp.

code này cho thấy các giới hạn của các loại cho hệ thống của tôi:

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

Kết quả là:

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

Kiểu int ký là cách lớn hơn bất kỳ các loại khác, vậy khi nào nó sẽ quay trở lại UINT_MAX?

+0

Giá trị bạn vừa in có thể khác nhau trên các hệ thống khác nhau. Nó chỉ được đảm bảo, một đoạn ngắn là <= int và một int là <= một ví dụ dài. Vì vậy, ngắn và int có thể có cùng kích thước. Bài viết của @ minitech là đúng – guitarflow

Trả lời

5

Có thể cho một số short int có cùng kích thước với số int, do đó, không thể thăng cấp unsigned short int thành ví dụ int. Đây không phải là trường hợp trên trình biên dịch của bạn.