#include
int main() {
float a = -1 / 2;
printf("%f\n", a); // 輸出:0.000000
return 0;
}
預期 -0.5,實得 0.0。為什麼?
-1 和 2 均為 int 字面常量**-1 / 2 進行整數除法,結果為 int 類型-1 / 2 = 0(數學值 -0.5,截斷向零得 0)0 隱式轉換為 float 賦給 aWhen integers are divided, the result of the / operator is the algebraic quotient with any fractional part discarded (truncation toward zero).
即:**丟棄小數部分,向零截斷**。
5 / 2 = 2-5 / 2 = -25 / -2 = -2-5 / -2 = 2-1 / 2 = 0
// 方法 1:至少一個運算元為浮點數
float a = -1.0f / 2; // -0.5
float b = -1 / 2.0; // -0.5
float c = (float)-1 / 2; // -0.5
float d = -1 / (float)2; // -0.5
// 方法 2:用浮點字面量
float e = -1.0 / 2.0; // double 運算再轉 float
C 保證:(a / b) * b + a % b == a
故 -1 % 2 = -1(因 0 * 2 + (-1) = -1)。
| 語言 | -1 / 2 | -1 % 2 | 備註 |
|---|---|---|---|
| C (C99+) | 0 | -1 | 向零截斷 |
| C++ (C++11+) | 0 | -1 | 同 C |
| Python 3 | -0.5 | 1 | / 為真除法,// 向下取整 |
| Java | 0 | -1 | 向零截斷 |
| JavaScript | -0.5 | -1 | 全浮點數 |
| Go | 0 | -1 | 向零截斷 |
| Rust | 0 | -1 | 向零截斷 |