Rumah > pembangunan bahagian belakang > C++ > Mengapa Limpahan Integer Bertanda Menyebabkan Gelung Tak Terhingga dalam Kod C Ini?

Mengapa Limpahan Integer Bertanda Menyebabkan Gelung Tak Terhingga dalam Kod C Ini?

Patricia Arquette
Lepaskan: 2024-12-02 22:12:11
asal
561 orang telah melayarinya

Why Does Signed Integer Overflow Cause an Infinite Loop in This C   Code?

Walaupun nampaknya tidak penting, limpahan integer dalam kod yang disediakan membawa kepada akibat yang ketara: nilai pecah pembolehubah gelung.

Tingkah laku yang diperhatikan di sini berpunca daripada tingkah laku tidak ditentukan akibat limpahan integer yang ditandatangani, seperti yang dinyatakan dalam draf C 11 N3337:

"Jika semasa penilaian ungkapan, hasilnya tidak ditakrifkan secara matematik atau tidak dalam julat
nilai yang boleh diwakili untuk jenisnya, tingkah laku itu tidak ditentukan."

Dengan tingkah laku yang tidak ditentukan ini, apa sahaja boleh berlaku, menjadikan analisis mengapa secara khusus tingkah laku ini berlaku tidak bermakna di bawah C peraturan.

Penyenaraian pemasangan kod mendedahkan penambahan eksplisit yang menyebabkan limpahan, dengan berkesan mengubah gelung menjadi gelung yang tidak terhingga. Tingkah laku ini disebabkan oleh andaian bahawa i adalah kurang daripada atau sama dengan 2 untuk tujuan pengoptimuman, berdasarkan kehadiran kelakuan tidak ditentukan untuk nilai yang lebih besar daripada 2. Akibatnya, keadaan gelung dianggap sentiasa benar.

Untuk membetulkan isu ini dan memastikan pelaksanaan yang betul, adalah penting untuk menghapuskan tingkah laku yang tidak ditentukan dengan menyemak semula syarat untuk memastikan ia berakhir

Atas ialah kandungan terperinci Mengapa Limpahan Integer Bertanda Menyebabkan Gelung Tak Terhingga dalam Kod C Ini?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan