use*_*514 8 c java integer-division long-integer
如果我有类似的东西:
long x = 1/2;
Run Code Online (Sandbox Code Playgroud)
这不应该四舍五入到1?当我在屏幕上打印时,它会说0.
整数除法的根源在于数论.当你做1/2时你会问2等于1多少次?答案是从来没有的,所以方程变为0*2 + 1 = 1,其中0为商(从1/2得到什么),而1是余数(从1%2得到什么).
指出%在数学意义上不是真正的模数,但总是来自除法的余数.处理负整数时有区别.
希望有所帮助.
这个表达式正在做的是它首先声明一个长x的存在,然后为它赋予右侧表达式的值.右侧表达式为1/2,由于1和2都是整数,因此将其解释为整数除法.对于整数除法,结果总是一个整数,所以沿着5/3的行将返回1,因为只有三个符合五.那么1/2,有多少2可以装进1?0.
如果你写一些像double x = 1/2的东西,这可以在某些语言中产生一些有趣的输出.在这种情况下,您可能会期望0.5,但是在分配并将结果转换为double之前,它通常会先评估右边的整数值,给出值0.0
重要的是要注意,在进行这种类型转换时,它永远不会舍入结果.所以如果你做相反的事情:长x =(长)(1.0/2.0); 然后while(1.0/2.0)将评估为0.5,(长)强制转换将强制将其截断为0.即使我有长x =(长)(0.9),结果仍然是0.它只是截断小数点后.