2019-07-15 08:15发布
Ansersion 发表于 2018-6-21 09:26 问题出在这个式子:H=a*2*b/1000; 因为a,b均为int,所以a*2*b会先转成int,再除以1000。因为int最大为32767而a*2*b=900000,所以溢出了。推荐将a,b也声明成long就可以了。
jf_43942235 发表于 2018-6-24 08:16 那为什么 H=(long)a*2*(long)b/1000; 或者
最多设置5个标签!
那为什么
H=(long)a*2*(long)b/1000;
或者
H=(long)(a*2*b)/1000;
结果也都不对呢
你这个问题有点搞笑了,前面这位前辈都跟你说过运算溢出的问题了,编辑器默认的情况下,运算值的堆栈存储空间是INT32位的,H=(long)(a*2*b)/1000;的优先级是a*2*b此时堆栈分配空间是32位,H=(long)a*2*(long)b/1000;堆栈空间是64位的,因为*的优先级默认稍微比/高一点,虽然运算是从左到右,但是他会先计算*的值再除,否则你还是不能得到你需要的结果。
一周热门 更多>