-2147483648 adalah bilangan bulat terkecil untuk tipe bilangan bulat dengan 32 bit, tetapi tampaknya akan meluap dalam if(...)kalimat:
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
Ini akan dicetak truedalam pengujian saya. Namun, jika kita menggunakan -2147483648 ke integer, hasilnya akan berbeda:
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
Ini akan dicetak false.
Saya bingung. Adakah yang bisa memberikan penjelasan tentang ini?
Pembaruan 02-05-2012:
Terima kasih atas komentar Anda, di kompiler saya, ukuran int adalah 4 byte. Saya menggunakan VC untuk beberapa pengujian sederhana. Saya telah mengubah uraian dalam pertanyaan saya.
Itu banyak balasan yang sangat baik dalam posting ini, AndreyT memberikan penjelasan yang sangat rinci tentang bagaimana perilaku kompiler pada input tersebut, dan bagaimana integer minimum ini diimplementasikan. qPCR4vir di sisi lain memberikan beberapa "keingintahuan" terkait dan bagaimana bilangan bulat diwakili. Sangat mengesankan!
INT_MINdari -9223372036854775808, jika CHAR_BITadalah 16. Dan bahkan dengan CHAR_BIT == 8dan sizeof(int== 4) `Anda mungkin mendapatkan -9223372036854775807karena C tidak memerlukan 2-Complement angka.