例如,
int result;
result = 125/100;
或者result = 43/100;
结果是否总是除法的下取整?定义的行为是什么?
int result;
result = 125/100;
或者result = 43/100;
结果是否总是除法的下取整?定义的行为是什么?
(a / b) * b + a % b == a
,并且a % b
的绝对值必须小于a
,但是对于负数a
或b
时,a % b
是否为负数没有指定。 - David Thornley*-*
。 - Ciro Santilli OurBigBook.comexpr1 / expr2
和 expr1 % expr2
在两个表达式都以相同方式组合相同对象时必须保持一致,对于 expr2
也是如此,但在截断除法与向下取整除法之间的选择上则没有具体规定,将允许生成更有效率的代码而不会破坏太多兼容性(实现者可以根据需要记录特定行为)。 - supercat是的,结果总是朝零截断。它会朝最小的绝对值四舍五入。
-5 / 2 = -2
5 / 2 = 2
对于无符号数和非负有符号数,这与floor函数相同(向负无穷方向舍入)。
如果结果为负数,C会向0截断而不是向下取整 - 我从这篇文章中学到了Python整数除法为什么总是向下取整:Why Python's Integer Division Floors
filtered = (k - 1) * filtered + value + carry; carry = filtered % factor; filtered /= factor
,并通过改变value
的值进行迭代。它可以很好地近似一阶低通滤波器,时间常数为k
的整数...但只有在除法截断且carry
获得负值时才是对称的。从时间到时间,两种除法行为都很方便。 - hobbsdiv
是一个向下取整的除法运算符,而factor
是奇数,则对于所有小于INT_MAX-(factor div 2)
的值,filtered += (filter+(factor div 2)) div factor
将产生干净且对称的行为。 - supercatfiltered
、carry
和factor
值,都会有“因子”个值产生每个可能的输出值,这些输出值严格介于最小和最大可能的输出值之间,除了会有2*factor+1
个值产生输出值为零。 - supercat结果总是除法的下取整吗?
不是。结果会有所变化,但只有在负数的情况下才会发生变化。
定义行为是什么?
为了明确起见,下取整向负无穷大舍入,而整数除法向零舍入(截断)。
对于正数,它们是相同的。
int integerDivisionResultPositive= 125/100;//= 1
double flooringResultPositive= floor(125.0/100.0);//=1.0
对于负值,情况就不同了
int integerDivisionResultNegative= -125/100;//=-1
double flooringResultNegative= floor(-125.0/100.0);//=-2.0
我知道其他人已经回答了你的问题,但是通俗来说:
5 / 2 = 2
//因为5和2都是整数,整数之间的除法总是截断小数部分。
5.0 / 2 或 5 / 2.0 或 5.0 / 2.0 = 2.5
//这里5或2或两个数都有小数点,所以商将会是一个小数。