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
Lepaskan: 2025-01-13 13:37:44
asal
914 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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