Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Mengendalikan Operasi Modulo Negatif dengan Betul?

Bagaimanakah Saya Mengendalikan Operasi Modulo Negatif dengan Betul?

Susan Sarandon
Susan Sarandonasal
2025-01-13 13:22:43602semak imbas

How Do I Handle Negative Modulo Operations Correctly?

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!

Kenyataan:
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