Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Mengendalikan Operasi Modulo Negatif dengan Betul?
Melayari Cabaran Modul Negatif
Pengendali modulo (%) boleh menjadi rumit apabila berurusan dengan nombor negatif. Walaupun ia lancar mengembalikan baki untuk integer positif, kelakuannya dengan nombor negatif sering membawa kepada kekeliruan. Operator ini menyediakan baki selepas pembahagian.
Isu dengan Modulo Negatif
Pertimbangkan tatasusunan dengan panjang 3:
<code>i % 3 = 4 -> 1 3 -> 0 2 -> 2 1 -> 1 0 -> 0 -1 -> -1 -2 -> -2 -3 -> 0 -4 -> -1</code>
Perhatikan bagaimana baki negatif kekal negatif, tidak seperti rakan positif mereka yang melalui julat positif.
Penyelesaian untuk Modulo Negatif
Untuk memastikan nombor negatif berkelakuan seperti yang diharapkan (bergulung), fungsi tersuai diperlukan:
<code class="language-c++">int GetArrayIndex(int i, int arrayLength) { int r = i % arrayLength; return (r < 0) ? (r + arrayLength) : r; }</code>
Cara Ia Berfungsi
Fungsi ini dengan bijak menambah arrayLength
kepada baki (r
) hanya jika r
adalah negatif. Ini "membungkus" baki negatif ke dalam julat positif, meniru gelagat modulo yang diingini.
Aplikasi Praktikal
Mari kita uji fungsi dengan tatasusunan 3 elemen kami:
GetArrayIndex( 4, 3) -> 1 GetArrayIndex( 3, 3) -> 0 GetArrayIndex( 2, 3) -> 2 GetArrayIndex( 1, 3) -> 1 GetArrayIndex( 0, 3) -> 0 GetArrayIndex(-1, 3) -> 2 GetArrayIndex(-2, 3) -> 1 GetArrayIndex(-3, 3) -> 0 GetArrayIndex(-4, 3) -> 2
Fungsi tersuai ini mengendalikan operasi modulo negatif dengan berkesan, memberikan hasil yang konsisten dan boleh diramal. Kini anda dengan yakin boleh bekerja dengan modulo negatif tanpa menghadapi tingkah laku yang tidak dijangka.
Atas ialah kandungan terperinci Bagaimanakah Saya Mengendalikan Operasi Modulo Negatif dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!