QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 992|回复: 9

遇到一个很奇怪的关于运算符的问题,向大家请教。

[复制链接]
发表于 2005-8-21 11:04:25 | 显示全部楼层 |阅读模式
很奇怪,
除了“=”以外,所有运算符似乎都失效了,
比如,我先给a、b赋值(非0),然后计算a*b,显示结果为0,
但编译时又不报错…………
发表于 2005-8-21 11:06:38 | 显示全部楼层
post the souce/makefile and your env
回复

使用道具 举报

 楼主| 发表于 2005-8-21 11:24:16 | 显示全部楼层
程序太长,是一个驱动,失效都是加减乘除移位一类运算符,都是不需要加头文件的。
最奇怪的是编译不报错。
回复

使用道具 举报

发表于 2005-8-21 13:51:41 | 显示全部楼层
切点代码片段做测试
回复

使用道具 举报

 楼主| 发表于 2005-8-21 22:52:27 | 显示全部楼层
找到出错地方了,
如果用:a=((x*y)*(z/);结果为0;
如果用:a=x*y*z/8;结果为正常。

可是不明白原因,虽然第一个罗嗦了些,但语法上似乎没错啊…………
回复

使用道具 举报

发表于 2005-8-22 08:47:30 | 显示全部楼层
这就是传说中的定点溢出问题了
回复

使用道具 举报

发表于 2005-8-22 10:05:24 | 显示全部楼层
电脑是不会四舍五入的,在转成正数时小数点后面的直接被砍掉,所以如果z小于8大于-8,a是整数,那么
a = z/8;的结果就是a是0。
回复

使用道具 举报

 楼主| 发表于 2005-8-25 08:27:14 | 显示全部楼层
哦,原来如此,谢谢楼上两位!
回复

使用道具 举报

发表于 2005-8-26 21:19:47 | 显示全部楼层
[quote:8e5491eb8f="wsm"]这就是传说中的定点溢出问题了[/quote]
回复

使用道具 举报

发表于 2005-8-30 23:42:42 | 显示全部楼层
看来你用的是int.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 11:49 , Processed in 0.066660 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表