向零截断意味着通过选择下一个最接近零的整数将实数转换为整数。同样,您写下数字,并忽略小数点后的所有内容,无论数字是正数还是负数。
考虑 11/4 = 2.75——如果将其截断为零,则得到 2。
考虑 -11/4 或 11/-4 = -2.75——如果将其截断为零,则得到 -2。
对于某些数学运算来说,(a/b)*b + a%b == a 很重要。如果我们必须使这个方程成立,并且我们也接受整数除法向零截断,那么我们可以推导出%
运算符如下:
a == 11, b == 4:
a/b == 2, 2*4 + a%b == 11, therefore a%b == 3.
a == -11, b == 4:
a/b == -2, -2 * 4 + a%b == -11, therefore a%b == -3.
a == 11, b == -4:
a/b == -2, -2 * -4 + a%b == 11, therefore a%b == 3.
a == -11, b == -4:
a/b == 2, 2 * -4 + a%b == -11, therefore a%b == -3.
一开始可能会令人困惑,但 C++0x 正在定义a%b
使用方程的运算符(a/b)*b + a%b == a
。这个方程甚至对于负数也成立,所以a%b
被定义为负数。