为了账号安全,请及时绑定邮箱和手机立即绑定

整数除法的行为是什么?

整数除法的行为是什么?

C++ C
明月笑刀无情 2019-05-28 17:51:55
整数除法的行为是什么?例如,int result;result = 125/100;要么result = 43/100;结果总会成为师的底线吗?什么是定义的行为?
查看完整描述

4 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

结果总会成为师的底线吗?什么是定义的行为?

是,两个操作数的整数商。

6.5.5乘法运算符

6当整数被分割时,/运算符的结果是代数商,丢弃任何小数部分。88)如果商a / b是可表示的,则表达式(a / b)* b + a%b应等于a。

以及相应的脚注:

88)这通常被称为“截断为零”。

当然要注意的两点是:

3通常的算术转换是在操作数上执行的。

和:

5 /运算符的结果是第一个操作数除以第二个操作数的商; %运算符的结果是余数。在这两个操作中,如果第二个操作数的值为零,则行为未定义。

[注意:强调我的]


查看完整回答
反对 回复 2019-05-28
?
守着一只汪

TA贡献1872条经验 获得超3个赞

Dirkgently给出 C99中整数除法的优秀描述,但是您也应该知道在C89中,带有负操作数的整数除法具有实现定义的方向。

从ANSI C草案(3.3.5):

如果任一操作数为负,则/运算符的结果是小于代数商的最大整数还是大于代数商的最小整数是实现定义的,这是%运算符的结果的符号。如果商a / b是可表示的,则表达式(a / b)* b + a%b应等于a。

当你遇到C89编译器时,请注意负数。

这是一个有趣的事实,C99选择截断为零,因为这是FORTRAN如何做到的。请参阅comp.std.c上的此消息


查看完整回答
反对 回复 2019-05-28
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

在结果为负的情况下,C截断为0而不是地板 - 我学习了这个解释为什么Python整数除法总是落在这里:为什么Python的整数分区Floors


查看完整回答
反对 回复 2019-05-28
?
ITMISS

TA贡献1871条经验 获得超8个赞

是的,结果总是被截断为零。它将朝着最小的绝对值四舍五入。

-5 / 2 = -2
 5 / 2 =  2

对于无符号和非负有符号值,这与floor(向-Infinity舍入)相同。


查看完整回答
反对 回复 2019-05-28
  • 4 回答
  • 0 关注
  • 750 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信