首頁 >後端開發 >C++ >為什麼 C 模運算子 (%) 有時會傳回負結果?

為什麼 C 模運算子 (%) 有時會傳回負結果?

Barbara Streisand
Barbara Streisand原創
2024-12-23 19:25:11340瀏覽

Why Does the C   Modulo Operator (%) Sometimes Return Negative Results?

模數評估:理解負結果

在C 中,已知模運算子(%) 在某些條件下會產生負值。這可能會令人困惑,特別是當這些操作回到不同的結果時:

std::cout << (-7 % 3) << std::endl;  // -1
std::cout << (7 % -3) << std::endl;  // 1

為了澄清這種行為,我們參考了 ISO C 標準 (ISO14882:2011)。模運算子傳回第一個操作數(分子)除以第二個操作數(分母)的餘數。

對於第一個運算,(-7) 除以 3,得到商數 - 2,餘數為-1。因此,(-7 % 3) 等於 -1。

對於第二個運算,7 除以 -3,也得到 -2 的商數。但是,由於分母為負,因此餘數的符號是實現定義的。在這種情況下,實作選擇傳回正餘數,即 1。

需要注意的是,模運算子的行為可能會因特定平台和實現的不同而有所不同。一般來說,建議仔細處理負值,並在使用模運算子時考慮不同結果的可能性。

以上是為什麼 C 模運算子 (%) 有時會傳回負結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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