-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 true
dalam 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_MIN
dari -9223372036854775808
, jika CHAR_BIT
adalah 16. Dan bahkan dengan CHAR_BIT == 8
dan sizeof(int
== 4) `Anda mungkin mendapatkan -9223372036854775807
karena C tidak memerlukan 2-Complement angka.