Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Operator Modulo (%) Berkelakuan Berbeza dengan Nilai Negatif dalam Bahasa C-Like?

Mengapa Operator Modulo (%) Berkelakuan Berbeza dengan Nilai Negatif dalam Bahasa C-Like?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 18:09:30559semak imbas

Why Does the Modulo Operator (%) Behave Differently with Negative Values in C-Like Languages?

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!

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