Limpahan dalam Tugasan Long Long Int: Mengapa Mendarab Huruf Integer Gagal
Dalam coretan kod yang disediakan, tiga penetapan integer panjang panjang dicuba:
long long int n = 2000*2000*2000*2000; // overflow long long int n = pow(2000,4); // works long long int n = 16000000000000; // works
Sementara tugasan ketiga berjaya, mengapa limpahan pertama walaupun menggunakan int panjang yang panjang?
Memahami Jenis Integer
Sebab limpahan terletak pada sifat jenis integer. Secara lalai, literal integer diberikan jenis terkecil yang boleh mewakili nilainya tanpa lebih kecil daripada int. Dalam kes yang diberikan, 2000 ialah int, yang biasanya menduduki 32 bit pada kebanyakan sistem.
Peraturan Pendaraban
Pengendali aritmetik, seperti pendaraban, digunakan dengan lebih besar daripada dua jenis yang terlibat, tetapi tidak lebih kecil daripada int. Contohnya:
Walau bagaimanapun, int * int masih memanggil operator*(int,int) -> int.
Taip Promosi dan Limpahan
Dalam tugasan yang melimpah, 2000*2000*2000*2000 melibatkan pendaraban 4 nilai int, menghasilkan integer lebih besar daripada int apa boleh tahan. Walaupun keputusan akhir disimpan dalam pembolehubah int panjang yang panjang, pendaraban berlaku dengan int.
Menyelesaikan Limpahan
Untuk mengelakkan limpahan, seseorang boleh menggunakan yang berikut pendekatan:
Atas ialah kandungan terperinci Mengapakah Mendarab Huruf Integer dalam Tugasan `long long long` Membawa kepada Limpahan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!