Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kami Boleh Mengendalikan Nombor Negatif dalam Pengindeksan Tatasusunan dengan Betul?

Bagaimanakah Kami Boleh Mengendalikan Nombor Negatif dalam Pengindeksan Tatasusunan dengan Betul?

Linda Hamilton
Linda Hamiltonasal
2025-01-13 13:37:44864semak imbas

How Can We Correctly Handle Negative Numbers in Array Indexing?

Mengendalikan nombor negatif dalam indeks tatasusunan

Dalam pengaturcaraan, kita selalunya perlu menggunakan indeks untuk mengakses elemen tatasusunan. Walaupun pengendali modulo berfungsi dengan baik apabila bekerja dengan nombor positif, nombor negatif boleh memberikan cabaran kerana perbezaan dalam cara ia dikendalikan.

Pemahaman aritmetik modular

Pengendali modulo (%) digunakan untuk mencari baki pembahagian operan pertama dengan operan kedua. Contohnya:

<code>4 % 3 == 1
3 % 3 == 0
2 % 3 == 2
1 % 3 == 1</code>

Walau bagaimanapun, pengendali modulo berkelakuan berbeza apabila berurusan dengan nombor negatif:

<code>-1 % 3 == -1
-2 % 3 == -2
-3 % 3 == 0
-4 % 3 == -1</code>

Sisihan daripada tingkah laku yang dijangkakan ini berpunca daripada pelaksanaan asas pengendali modulo, yang direka untuk menghasilkan baki bukan negatif.

Gunakan nombor negatif untuk pengindeksan tatasusunan

Untuk menyelesaikan ketidakkonsistenan ini dan memastikan pengindeksan tatasusunan yang betul, kami memerlukan fungsi modulo tersuai. Salah satu cara untuk mencapai ini adalah seperti berikut:

<code class="language-c++">int mod(int x, int m) {
    return (x%m + m)%m;
}</code>

Fungsi ini mula-mula mengira baki dan kemudian menambah panjang tatasusunan jika baki negatif. Ini memastikan bahawa indeks yang dikehendaki dalam tatasusunan dikembalikan walaupun untuk nilai negatif.

Cara lain untuk mengoptimumkan bilangan operasi modular ialah:

<code class="language-c++">int mod(int x, int m) {
    int r = x%m;
    return r < 0 ? r + m : r;
}</code>

Versi ini menggunakan pernyataan bersyarat dan bukannya operasi modulo tambahan untuk mencapai hasil yang sama.

Dengan menggunakan fungsi modulo tersuai ini, anda boleh mengendalikan nombor negatif dalam indeks tatasusunan dengan cekap, memastikan anda mendapat hasil yang diingini.

Contoh pelaksanaan

Menggunakan fungsi modulo tersuai, coretan kod berikut menunjukkan cara mengindeks tatasusunan dengan nombor negatif dengan betul:

<code class="language-c++">int GetArrayIndex(int i, int arrayLength) {
    return mod(i, arrayLength);
}

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</code>

Dengan pemahaman yang lebih baik dan fungsi modulo tersuai ini, nombor negatif tidak lagi akan menimbulkan ancaman kepada pengindeksan tatasusunan yang tepat.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengendalikan Nombor Negatif dalam Pengindeksan Tatasusunan 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