Sách đó không chính xác. Theo C11 6.4.4.1, loại hằng số nguyên của hệ thập lục phân được xác định từ bảng này:
Suffix ... Octal or Hexadecimal Constant
None ... int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
u or U ... unsigned int
unsigned long int
unsigned long long int
liên tục 0xAA
của bạn không có hậu tố để phần trên của bảng trên là những gì được áp dụng. Có nghĩa là: trình biên dịch đầu tiên sẽ kiểm tra xem giá trị có thể phù hợp trong một số int
hay không. Nếu nó không phù hợp, nó sẽ kiểm tra nếu nó sẽ phù hợp trong một unsigned int
và như vậy.
Trên mọi triển khai đã biết của C, giá trị 0xAA
chắc chắn sẽ khớp với một số int
. Câu trả lời đúng cho câu hỏi là int
.
Tuy nhiên, có hằng số là 0xAAu
, phần dưới cùng của bảng được trích dẫn sẽ áp dụng và kết quả sẽ là unsigned int
.
Đó là cách ngôn ngữ xác định ngôn ngữ đó. Một người nào đó tại một số điểm quyết định đó là như thế nào. Bạn thực sự không thể tìm ra lý do tại sao trừ khi bạn có một cỗ máy thời gian và có thể hỏi ai đã đưa ra quyết định đó vài thập kỷ trước. – Art
@Art bạn có thể vui lòng cung cấp thêm thông tin từ tiêu chuẩn C hoặc một thứ gì khác không? Tôi sẽ đánh giá cao điều đó :) –
Đây là tài liệu tham khảo bạn cần http://stackoverflow.com/questions/12499592/c-hex-constant-type – HighPredator