了解類別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中文網其他相關文章!