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?
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