Rumah >pembangunan bahagian belakang >C++ >Mengapa Pendaraban Integer Membawa kepada Limpahan dalam C?
Limpahan Integer: Apabila Pendaraban Membawa kepada Bencana
Dalam C , adalah penting untuk memahami saiz dan jenis integer untuk mengelakkan kemungkinan limpahan. Mari kita periksa coretan kod berikut:
long long int n = 2000*2000*2000*2000; // overflow long long int n = pow(2000,4); // works long long int n = 16000000000000; // works
Mengapa baris pertama mengakibatkan limpahan, manakala dua yang lain berfungsi tanpa masalah?
Penyebabnya terletak pada cara C mengendalikan literal integer dan operasi aritmetik. Secara lalai, literal integer adalah jenis terkecil yang boleh menyimpan nilainya tetapi tidak lebih kecil daripada int. Dalam kes ini, 2000 ialah int, biasanya jenis 32-bit.
Apabila menjalankan operasi aritmetik, pengkompil mengikut peraturan khusus berdasarkan jenis operan. Dalam senario ini, pendaraban dilakukan dengan int, iaitu jenis yang lebih besar daripada jenis yang terlibat. Walau bagaimanapun, tugasan adalah tidak relevan kerana C tidak membuat kesimpulan jenis berdasarkan destinasi.
Hasil pendaraban, yang melebihi kapasiti int, disimpan sebagai int, yang membawa kepada limpahan. Inilah sebabnya mengapa baris pertama mencetuskan limpahan, manakala dua yang lain tidak.
Untuk menyelesaikan isu ini, kita boleh menentukan secara eksplisit jenis pemalar yang digunakan dalam baris pertama dengan menambahkan akhiran LL (atau ll ). Ini memastikan bahawa literal dianggap sebagai int panjang yang panjang, menghalang limpahan.
Dengan memahami cara jenis integer dan operasi aritmetik berfungsi dalam C , kami boleh mengelakkan kemungkinan perangkap dan memastikan kod kami mengendalikan manipulasi data dengan betul.
Atas ialah kandungan terperinci Mengapa Pendaraban Integer Membawa kepada Limpahan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!