Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kami Boleh Mengendalikan Nombor Negatif dalam Pengindeksan Tatasusunan dengan Betul?
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.
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.
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.
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!