-2147483648 là số nguyên nhỏ nhất cho loại số nguyên có 32 bit, nhưng có vẻ như nó sẽ tràn vào if(...)
câu:
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
Điều này sẽ in true
trong thử nghiệm của tôi. Tuy nhiên, nếu chúng ta chuyển -2147483648 thành số nguyên, kết quả sẽ khác:
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
Điều này sẽ in false
.
Tôi bối rối. Bất cứ ai có thể đưa ra một lời giải thích về điều này?
Cập nhật ngày 02-05-2012:
Cảm ơn ý kiến của bạn, trong trình biên dịch của tôi, kích thước của int là 4 byte. Tôi đang sử dụng VC cho một số thử nghiệm đơn giản. Tôi đã thay đổi mô tả trong câu hỏi của tôi.
Đó là rất nhiều câu trả lời rất hay trong bài đăng này, AndreyT đã đưa ra một lời giải thích rất chi tiết về cách trình biên dịch sẽ hành xử trên đầu vào như vậy và cách thức số nguyên tối thiểu này được thực hiện. Mặt khác, qPCR4vir đã đưa ra một số "sự tò mò" liên quan và cách thức số nguyên được biểu diễn. Thật ấn tượng!
INT_MIN
số -9223372036854775808
, nếu CHAR_BIT
là 16. Và ngay cả với CHAR_BIT == 8
và sizeof(int
== 4) `bạn có thể nhận được -9223372036854775807
vì C không yêu cầu 2-Complement số.