打印
[开发工具]

报告一个C编译器下的“BUG”

[复制链接]
4678|17
手机看帖
扫描二维码
随时随地手机跟帖
楼主
本帖最后由 uc_stm32f050 于 2012-2-23 09:51 编辑
还是你的代码有问题
lost1421 发表于 2012-1-16 15:57


楼主完全是想当然。

long i;
i=14716*32;

楼主自以为i是long型,那么14716*32就按long来运算。
楼主太想当然了。

是不是 float i;
i=14716/32;   
14716/32 就按float运算。

i=14716*32;
是先计算14716*32,再把结果赋值给i。
无论i是什么类型,都不会影响到 14716*32的结果。
(这好比A=B,A的类型能影响B的值吗?)

再说 14716*32
14716,32都没有后缀,类型是int,
楼主自己去算 ((int)14716) * ((int)32)

正确写法:
long i;
i=14716L*32L;
加个后缀L,表示14716L,32L都是long的内型。
这样运算才不会溢出。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则