C 標準規定:整數除法結果向零截斷 (truncation toward zero)。
| 表達式 | 數學值 | C 結果 | 說明 |
|---|---|---|---|
1 / 2 | 0.5 | 0 | 向零截斷,非四捨五入(應為 1) |
5 / 2 | 2.5 | 2 | 同理 |
-5 / 2 | -2.5 | -2 | C99 規定向零,非向下取整(-3) |
5 / -2 | -2.5 | -2 | 同理 |
-5 / -2 | 2.5 | 2 | 同理 |
IDIV, ARM SDIV) 直接產生商與餘數,商即向零截斷;(a/b)*b + a%b == a 恆成立(C99 保證)。
// 正整數 a, b
int ceil_div(int a, int b) { return (a + b - 1) / b; }
// 通用版 (處理負數)
int ceil_div_general(int a, int b) {
int q = a / b, r = a % b;
return (r != 0 && ((r > 0) == (b > 0))) ? q + 1 : q;
}
// 正數
int round_div(int a, int b) { return (a + b/2) / b; }
// 負數需分情況,建議轉浮點:round((double)a/b)
-5 % 2 == -1 // 餘數符號同被除數 (C99)
5 % -2 == 1
-5 % -2 == -1