-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 truetrong 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_MINsố -9223372036854775808, nếu CHAR_BITlà 16. Và ngay cả với CHAR_BIT == 8và sizeof(int== 4) `bạn có thể nhận được -9223372036854775807vì C không yêu cầu 2-Complement số.