C/C++ 整數除法採用向零取整(Truncation toward zero):捨去小數部分,保留整數部分。即結果朝 0 方向取最接近的整數。
| 運算式 | 數學值 | C/C++ 結果 | 說明 |
|---|---|---|---|
9 / 5 | 1.8 | 1 | 正數直接捨去小數 |
9 / -5 | -1.8 | -1 | 向零方向取整(-1 比 -2 更接近 0) |
-9 / 5 | -1.8 | -1 | 向零方向取整 |
-9 / -5 | 1.8 | 1 | 負負得正,捨去小數 |
-9/5 = -1,9/-5 = -1-9//5 = -2,9//-5 = -2這是跨語言移植代碼時常見的坑點。
C/C++ 保證:(a / b) * b + (a % b) == a
| a | b | a / b | a % b | 驗證 |
|---|---|---|---|---|
| 9 | 5 | 1 | 4 | 1*5+4=9 ✓ |
| -9 | 5 | -1 | -4 | -1*5+(-4)=-9 ✓ |
| 9 | -5 | -1 | 4 | -1*(-5)+4=9 ✓ |
| -9 | -5 | 1 | -4 | 1*(-5)+(-4)=-9 ✓ |
(a >= 0 ? a/b : -((-a+b-1)/b))((a % b) + b) % b