打印

99.99%可能性,KEIL BUG

[复制链接]
21601|105
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ayb_ice|  楼主 | 2011-9-26 09:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
来与君| | 2011-9-26 11:25 | 只看该作者
生成汇编看一下就明白了

使用特权

评论回复
板凳
dqyubsh| | 2011-9-26 12:14 | 只看该作者
哎,真无语。

使用特权

评论回复
地板
beyond696| | 2011-9-26 12:35 | 只看该作者
呵呵,没看出来bug在那里

使用特权

评论回复
5
ZALIN| | 2011-9-26 13:22 | 只看该作者
看样子KEIL是朝-无穷大取整的,不知道别的编译器和C标准是怎么定义的

但好象取余方法与取整方法不一致

使用特权

评论回复
6
uc_efm32| | 2011-9-26 13:27 | 只看该作者
本帖最后由 uc_efm32 于 2011-9-26 13:30 编辑
不解释,直接上图,自己测试
ayb_ice 发表于 2011-9-26 09:13


楼主在这里瞎掰有什么意思?

找本C语言标准,好好看看就明白了。

使用特权

评论回复
7
ayb_ice|  楼主 | 2011-9-26 13:29 | 只看该作者
楼主先把这个问题弄明白了再说:
C标准“ / ”操作是什么运算符?操作数要满足什么要求?
运算结果与操作数的关系是什么?
有符号与无符号运算规则有什么不同? ...
uc_efm32 发表于 2011-9-26 13:27

那你来讲讲,难道你还认为KEIL是正确的吗

使用特权

评论回复
8
uc_efm32| | 2011-9-26 13:42 | 只看该作者
When integers are divided, the result of the / operator is the algebraic quotient with any fractional part discarded.

Image0453.JPG (74.46 KB )

Image0453.JPG

使用特权

评论回复
9
uc_efm32| | 2011-9-26 13:48 | 只看该作者
-5 / 4 = -1 ………………-1,

没仔细看,
貌似楼主的图里面KEIL确实有问题,

楼主的测试程序太短,建议加上volatile.

使用特权

评论回复
10
uc_efm32| | 2011-9-26 13:52 | 只看该作者
IAR 8051 8.10

Image0454.JPG (48.99 KB )

Image0454.JPG

使用特权

评论回复
11
ayb_ice|  楼主 | 2011-9-26 13:52 | 只看该作者
-5 / 4 = -1 ………………-1,

没仔细看,
貌似楼主的图里面KEIL确实有问题,

楼主的测试程序太短,建议加上volatile.
uc_efm32 发表于 2011-9-26 13:48

别说加volatile,你加什么也没有用
99.99%,KEIL BUG

使用特权

评论回复
12
t.jm| | 2011-9-26 13:59 | 只看该作者
1# ayb_ice 这真是一个BUG呢!
我发现,keil (/ 4)(/2)运算是通过RCC实现的,其它是调用库函数实现的!
为什么说是BUG,且看keil的计算:
(1)-4/4 = -1,
(2)-5/4 = -2,   -5/3 = -1
(3)-6/4 = -2,   -6/3 = -2
(4)-7/4 = -2,
(5)-8/4 = -2,

使用特权

评论回复
13
ayb_ice|  楼主 | 2011-9-26 14:06 | 只看该作者
所以说99.99%的可能性是BUG
我测试过
IAR8051,FSL CWS08,STVD,KEIL ARM,SDCC 51结果都正确,唯KEIL C51错误
C51把"x=z/4;"当成了"x = z>>2";编译了,结果杯具了
但C51这样做结果也正确
signed char x,y,z,a;
z = -5;
a = 4;
x = z/a;
y=z%a;

使用特权

评论回复
14
t.jm| | 2011-9-26 14:14 | 只看该作者
所以说99.99%的可能性是BUG
我测试过
IAR8051,FSL CWS08,STVD,KEIL ARM,SDCC 51结果都正确,唯KEIL C51错误
C51把"x=z/4;"当成了"x = z>>2";编译了,结果杯具了
但C51这样做结果也正确
signed char x,y,z,a;
z = -5;
a ...
ayb_ice 发表于 2011-9-26 14:06


z/a,这样即使a =4,keil也不敢用移位运算啊,只能调用库函数,所以结果正确!

使用特权

评论回复
15
liang7143| | 2011-9-26 15:02 | 只看该作者
真是BUG啊?

使用特权

评论回复
16
t.jm| | 2011-9-26 15:29 | 只看该作者
谁英文好的,去报告BUG吧,别说我们只知道用盗版,报告BUG也是做贡献啊!

使用特权

评论回复
17
endload| | 2011-9-26 15:57 | 只看该作者
:lol

使用特权

评论回复
18
ccmc| | 2011-9-26 15:59 | 只看该作者
本帖最后由 ccmc 于 2011-9-26 17:11 编辑

呵呵,由楼主去报告吧。。。咱是打酱油的。。

int型的运算竟然是对的,看了下汇编,没RRC

使用特权

评论回复
19
ccmc| | 2011-9-26 15:59 | 只看该作者
本帖最后由 ccmc 于 2011-9-26 16:19 编辑

我去试试MDK是不是也这样

结果如下:

1.jpg (40.54 KB )

结果正确

结果正确

2.jpg (43.98 KB )

MDK版本

MDK版本

使用特权

评论回复
20
linbei1988| | 2011-9-26 16:38 | 只看该作者
谁英文好的,去报告BUG吧,别说我们只知道用盗版,报告BUG也是做贡献啊!
t.jm 发表于 2011-9-26 15:29

到时候说你是盗版造成的问题,你怎么说。。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
499734424 + 1
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15449

帖子

34

粉丝