T.T*_*.T. 197 c math c99 integer-division c89
例如,
int result;
result = 125/100;
要么
result = 43/100;
结果总会成为师的底线吗?什么是定义的行为?
dir*_*tly 168
结果总会成为师的底线吗?什么是定义的行为?
是,两个操作数的整数商.
6.5.5乘法运算符
6当整数被分割时,/运算符的结果是代数商,丢弃任何小数部分.88)如果商a/b是可表示的,则表达式(a/b)*b + a%b应等于a.
以及相应的脚注:
88)这通常被称为"截断为零".
当然要注意的两点是:
3通常的算术转换是在操作数上执行的.
和:
5 /运算符的结果是第一个操作数除以第二个操作数的商; %运算符的结果是余数.在这两个操作中,如果第二个操作数的值为零,则行为未定义.
[注意:强调我的]
sch*_*hot 39
Dirkgently给出了 C99中整数除法的优秀描述,但是您也应该知道在C89中,带有负操作数的整数除法具有实现定义的方向.
从ANSI C草案(3.3.5):
如果任一操作数为负,则/运算符的结果是小于代数商的最大整数还是大于代数商的最小整数是实现定义的,这是%运算符的结果的符号.如果商a/b是可表示的,则表达式(a/b)*b + a%b应等于a.
当你遇到C89编译器时,请注意负数.
这是一个有趣的事实,C99选择截断为零,因为这是FORTRAN如何做到的.请参阅comp.std.c上的此消息.
小智 22
在结果为负的情况下,C截断为0而不是地板 - 我学习了这个解释为什么Python整数除法总是落在这里:为什么Python的整数分区Floors
Leo*_*nid 20
是的,结果总是被截断为零.它将朝着最小的绝对值四舍五入.
-5 / 2 = -2
 5 / 2 =  2
对于无符号和非负有符号值,这与floor(向-Infinity舍入)相同.
Muh*_*eeb 13
结果总会成为师的底线吗?
不会.结果会有所不同,但只有负值才会发生变化.
什么是定义的行为?
使整数分区朝向负无穷大,同时整数除法向零舍入(截断)
对于正值,它们是相同的
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 or 5 / 2.0 or 5.0 /2.0 = 2.5//这里5或2或两者都有小数,因此你得到的商将是小数。
| 归档时间: | 
 | 
| 查看次数: | 335959 次 | 
| 最近记录: |