Rumah > Artikel > pembangunan bahagian belakang > Mengapa Operator Modulo (%) Berkelakuan Berbeza dengan Nilai Negatif dalam Bahasa C-Like?
Memahami Gelagat Pengendali Modulo dengan Nilai Negatif dalam Bahasa Seperti C
Pengendali modulo (%) dalam bahasa terbitan C, seperti C, C dan Obj-C, boleh membawa kepada hasil yang tidak dijangka apabila bekerja dengan nombor negatif. Ini boleh mengecewakan, terutamanya bagi mereka yang mempunyai latar belakang matematik. Dalam perbincangan ini, kita akan menyelidiki isu tersebut dan meneroka penyelesaian untuk mengendalikan nilai negatif dalam operasi modulo.
Satu aspek penting yang perlu diingat ialah operasi modulo mencerminkan baki selepas pembahagian integer. Walau bagaimanapun, untuk nombor negatif, tanda selebihnya adalah ditakrifkan pelaksanaan, mengikut piawaian C. Ketidakkonsistenan ini boleh mengakibatkan output yang mengejutkan, seperti (-1) % 8 mengembalikan -1 dan bukannya 7 yang dijangkakan.
Untuk menangani cabaran ini, kita boleh memanfaatkan pendekatan berikut:
<code class="c">int mod(int a, int b) { if (b < 0) return -mod(-a, -b); int ret = a % b; if (ret < 0) ret += b; return ret; }</code>
Penyelesaian ini menampung kedua-dua operan positif dan negatif. Ia memastikan bahawa baki sentiasa positif dengan menambah pembahagi jika baki negatif. Akibatnya, mod(-1, 8) akan mengembalikan 7, manakala mod(13, -8) akan mengembalikan -3, memberikan tingkah laku yang konsisten dan intuitif.
Atas ialah kandungan terperinci Mengapa Operator Modulo (%) Berkelakuan Berbeza dengan Nilai Negatif dalam Bahasa C-Like?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!