Rumah >pembangunan bahagian belakang >C++ >Adakah Limpahan Integer Ditandatangani Masih Kelakuan Tidak Ditakrifkan dalam C ?
Adakah Limpahan Integer Ditandatangani Masih Tidak Ditakrifkan Gelagat dalam C ?
Seperti yang ditakrifkan dalam piawaian C 11, limpahan integer yang ditandatangani kekal sebagai gelagat tidak ditentukan. Walaupun dokumentasi cstdint menyatakan bahawa jenis int8_t, int16_t, int32_t dan int64_t menggunakan pelengkap 2 untuk nilai negatif, tingkah laku limpahan masih dianggap tidak ditentukan.
Piawaian C 11 dalam Perenggan 5/4 dengan tegas menyatakan:**Jika semasa penilaian sesuatu ungkapan, hasilnya tidak ditakrifkan secara matematik atau tidak dalam julat
nilai yang boleh diwakili untuk jenisnya, tingkah laku itu tidak ditentukan.**Oleh itu, walaupun perwakilan pelengkap dua digunakan untuk jenis bertanda ini, modulo aritmetik 2 ^n tidak diandaikan secara tersirat semasa penilaian.Sebaliknya, Piawaian C 11 dengan jelas menyatakan dalam Perenggan 3.9.1/4 bahawa aritmetik tidak bertanda mematuhi aritmetik modular:
Integer tidak bertanda, diisytiharkan tidak bertanda, hendaklah mematuhi undang-undang modulo aritmetik 2^n dengan n ialah nombor bit dalam perwakilan nilai saiz tertentu itu integerOleh itu, operasi aritmetik yang tidak ditandatangani sentiasa boleh ditakrifkan secara matematik, dan nilai yang terhasil berada dalam julat yang boleh diwakili, sekali gus mengecualikannya daripada klausa kelakuan tidak ditentukan. Nota kaki 46 menjelaskan lagi perkara ini:Ini membayangkan bahawa
tidak bertanda aritmetik tidak melimpah kerana hasil yang tidak boleh diwakili oleh hasiljenis integer tidak bertanda dikurangkan modulo nombor yang satu lebih besar daripada nilai terbesar yang boleh diwakili olehRingkasnya, sementara penggunaan perwakilan pelengkap 2 untuk jenis yang ditandatangani menyediakan gelagat yang jelas untuk nilai negatif, limpahan integer untuk jenis ini kekal sebagai gelagat yang tidak ditentukan dalam C , kerana Standard mengatasi sebarang gelagat yang bergantung kepada pelaksanaan .
integer tak bertanda yang terhasil jenis.
Atas ialah kandungan terperinci Adakah Limpahan Integer Ditandatangani Masih Kelakuan Tidak Ditakrifkan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!