结果永远是分组发言吗? 定义的行为是什么?
是的,两个操作数的整数商。
6.5.5乘法运算符
6整数除法时,/运算符的结果是去掉任何小数部分的代数商。88)如果商a/b是可表示的,则表达式(a/b)*b+a%b应等于a。
和相应的脚注:
88)这通常被称为“向零截断”。
当然需要注意的两点是:
3通常的算术转换是在操作数上进行的。
和:
5/运算符的结果是第一个操作数除以第二个操作数所得的商; %运算符的结果是余数。 在这两个操作中,如果第二个操作数的值为零,则行为是未定义的。
[注:强调我的]
Dirkglyly对C99中的整数除法给出了很好的描述,但您也应该知道,在C89中,带负操作数的整数除法有一个实现定义的方向。
ANSI C草案(3.3.5):
如果任一操作数为负数,则/运算符的结果是小于代数商的最大整数还是大于代数商的最小整数是由实现定义的,%运算符结果的符号也是如此。 如果商a/b是可表示的,则表达式(a/b)*b+a%b应等于a。
所以当你被C89编译器困住时,要小心负数。
一个有趣的事实是,C99选择了向零截断,因为FORTRAN就是这样做的。 请参阅comp.std.c上的此消息。
当结果为负数时,C将截断到0而不是地板--我在这篇文章中了解了为什么Python整数除法总是地板:为什么Python的整数除法地板