首頁 >後端開發 >C++ >為什麼類別 C 語言中模運算子 (%) 對負值的表現不同?

為什麼類別 C 語言中模運算子 (%) 對負值的表現不同?

Patricia Arquette
Patricia Arquette原創
2024-11-03 18:09:30635瀏覽

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

了解類別C 語言中帶負值的模運算子的行為

C 派生語言中的模運算子(%),例如C、C 和Obj-C 在處理負數時可能會導致意外結果。這可能會令人沮喪,尤其是對於那些具有數學背景的人來說。在本次討論中,我們將深入研究該問題並探索處理模運算中負值的解決方案。

需要記住的一個關鍵方面是模運算反映了整數除法後的餘數。但是,對於負數,根據 C 標準,餘數的符號是實現定義的。這種不一致可能會導致令人驚訝的輸出,例如 (-1) % 8 返回 -1 而不是預期的 7。

為了應對這個挑戰,我們可以利用以下方法:

<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>

此解決方案同時適用於正操作數和負操作數。如果餘數為負,則透過添加除數來確保餘數始終為正。因此,mod(-1, 8) 將返回 7,而 mod(13, -8) 將返回 -3,提供一致且直觀的行為。

以上是為什麼類別 C 語言中模運算子 (%) 對負值的表現不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn