Rumah > pembangunan bahagian belakang > C++ > 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
Lepaskan: 2024-11-03 18:09:30
asal
668 orang telah melayarinya

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

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!

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