Mengapakah Mendarab Huruf Integer dalam Tugasan `long long long` Membawa kepada Limpahan?

DDD
Lepaskan: 2024-11-08 08:28:01
asal
398 orang telah melayarinya

Why Does Multiplying Integer Literals in a `long long int` Assignment Lead to Overflow?

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
Salin selepas log masuk

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:

  • char * char akan memanggil operator*(int,int) -> int
  • char * int akan memanggil operator*(int,int) -> int
  • long * int akan memanggil operator*(long,long) -> panjang

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:

  • Gunakan 2000LL secara eksplisit, yang mewakili int panjang yang panjang literal.
  • Gunakan pow(2000,4) untuk melakukan pengiraan sebagai dua kali ganda dan kemudian tetapkan kepada pembolehubah int long long.
  • Tetapkan nilai integer besar secara langsung, seperti 16000000000000, kepada pembolehubah long long int.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!