Tất cả các số nguyên loại khác nhau, tức là bạn có thể tải xuống một cách an toàn các chức năng cho tất cả chúng và bạn sẽ không gặp bất kỳ xung đột nào. Tuy nhiên, một số lần sử dụng cùng một số bit cho biểu diễn của chúng. Ngay cả khi họ sử dụng cùng một số bit ký kết và các loại unsigned luôn luôn có một phạm vi khác nhau. Ngoại trừ char
, sử dụng bất kỳ loại số nguyên nào không có signed
tương đương với việc sử dụng nó với signed
, tức là signed int
và int
là tương đương. char
là một loại khác là signed char
và unsigned char
nhưng char
có cùng một phạm vi và phạm vi là signed char
hoặc unsigned char
. Bạn có thể sử dụng std::numeric_limits<char>::is_signed
để tìm hiểu xem nó sử dụng.
Về các khía cạnh thú vị hơn. Các điều kiện sau đều đúng:
7 <= std::numeric_limits<signed char>::digits
sizeof(char) == 1
sizeof(char) == sizeof(signed char)
sizeof(char) == sizeof(unsigned char)
15 <= std::numeric_limits<short>::digits
sizeof(char) <= sizeof(short)
sizeof(short) <= sizeof(int)
31 <= std::numeric_limits<long>::digits
sizeof(int) <= sizeof(long)
63 <= std::numeric_limits<long long>::digits
sizeof(long) <= sizeof(long long)
sizeof(X) == sizeof(signed X)
sizeof(signed X) == sizeof(unsigned X)
(nơi "X" là một trong những char
, short
, int
, long
, và long long
).
Điều này có nghĩa là kích thước của tất cả loại nguyên có thể giống với loại này giữ ít nhất 64 bit (và dường như Cray X-MP là một con thú). Trên các máy hiện đại thường là sizeof(int) == sizeof(long)
nhưng có các máy ở nơi sizeof(int) == sizeof(short)
. Cho dù long
là 32 hoặc 64 bit phụ thuộc vào kiến trúc thực tế và cả hai loại hiện tại xung quanh.
Nguồn
2011-12-30 00:28:47
Trên 'linux-amd64'' int' có 32 bit trong khi 'long' có 64. –
Điều này là trực quan rõ ràng: tại sao ngôn ngữ sẽ đốt cháy từ khóa để biểu thị cùng một thứ? –
Không thể đồng ý với điều này. Nó không phải luôn luôn lý tưởng miễn phí của sự mơ hồ và dự phòng. – qazwsx