整数除法的行为是什么?
例如,
int result;
result = 125/100;
或者
result = 43/100;
结果将始终是除法的下限吗?定义的行为是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
例如,
int result;
result = 125/100;
或者
result = 43/100;
结果将始终是除法的下限吗?定义的行为是什么?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
不完全是。它向 0 截断,而不是向下截断。
以及相应的脚注:
当然,有两点需要注意:
和:
[注意:强调我的]
Not quite. It truncates toward 0, rather than flooring.
and the corresponding footnote:
Of course two points to note are:
and:
[Note: Emphasis mine]
Dirkgently 给出了精彩的描述 C99 中的整数除法,但您还应该知道,在 C89 中,带有负操作数的整数除法具有实现定义的方向。
来自 ANSI C 草案 (3.3.5):
因此,当您陷入 C89 编译器困境时,请注意负数。
有趣的是,C99 选择了向零截断,因为 FORTRAN 就是这么做的。请参阅 comp.std.c 上的此消息。
Dirkgently gives an excellent description of integer division in C99, but you should also know that in C89 integer division with a negative operand has an implementation-defined direction.
From the ANSI C draft (3.3.5):
So watch out with negative numbers when you are stuck with a C89 compiler.
It's a fun fact that C99 chose truncation towards zero because that was how FORTRAN did it. See this message on comp.std.c.
是的,结果总是被截断为零。它将向最小绝对值舍入。
对于无符号和非负有符号值,这与下限相同(向 -Infinity 舍入)。
Yes, the result is always truncated towards zero. It will round towards the smallest absolute value.
For unsigned and non-negative signed values, this is the same as floor (rounding towards -Infinity).
当结果为负数时,C 会向 0 截断而不是向下取整 - 我在这篇文章中了解到为什么 Python 整数除法总是向下取整:为什么 Python 的整数除法层
Where the result is negative, C truncates towards 0 rather than flooring - I learnt this reading about why Python integer division always floors here: Why Python's Integer Division Floors
不会。结果会有所不同,但只有负值才会发生变化。
为了清楚起见,向下舍入到负无穷大,而整数除法舍入到零(截断)
对于正值,它们是相同的
对于负值,这是不同的
No. The result varies, but variation happens only for negative values.
To make it clear floor rounds towards negative infinity,while integer division rounds towards zero (truncates)
For positive values they are the same
For negative value this is different
我知道人们已经回答了你的问题,但用外行的话来说:
5 / 2 = 2
//since 5 和 2 都是整数,整数除法总是截断小数5.0 / 2 或 5 / 2.0 或5.0 /2.0 = 2.5
//这里5或2或两者都有小数,因此你得到的商将是小数。I know people have answered your question but in layman terms:
5 / 2 = 2
//since both 5 and 2 are integers and integers division always truncates decimals5.0 / 2 or 5 / 2.0 or 5.0 /2.0 = 2.5
//here either 5 or 2 or both has decimal hence the quotient you will get will be in decimal.