99.99%可能性,KEIL BUG

[复制链接]
24136|105
 楼主| ayb_ice 发表于 2011-9-26 09:13 | 显示全部楼层 |阅读模式
不解释,直接上图,自己测试

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

参与人数 1威望 +1 收起 理由
t.jm + 1 不错,居然被你发现一个大名鼎鼎的软件的BU ...

查看全部评分

来与君 发表于 2011-9-26 11:25 | 显示全部楼层
生成汇编看一下就明白了
dqyubsh 发表于 2011-9-26 12:14 | 显示全部楼层
哎,真无语。
beyond696 发表于 2011-9-26 12:35 | 显示全部楼层
呵呵,没看出来bug在那里
ZALIN 发表于 2011-9-26 13:22 | 显示全部楼层
看样子KEIL是朝-无穷大取整的,不知道别的编译器和C标准是怎么定义的

但好象取余方法与取整方法不一致
uc_efm32 发表于 2011-9-26 13:27 | 显示全部楼层
本帖最后由 uc_efm32 于 2011-9-26 13:30 编辑
不解释,直接上图,自己测试
ayb_ice 发表于 2011-9-26 09:13


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

找本C语言标准,好好看看就明白了。
 楼主| ayb_ice 发表于 2011-9-26 13:29 | 显示全部楼层
楼主先把这个问题弄明白了再说:
C标准“ / ”操作是什么运算符?操作数要满足什么要求?
运算结果与操作数的关系是什么?
有符号与无符号运算规则有什么不同? ...
uc_efm32 发表于 2011-9-26 13:27

那你来讲讲,难道你还认为KEIL是正确的吗
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.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
uc_efm32 发表于 2011-9-26 13:48 | 显示全部楼层
-5 / 4 = -1 ………………-1,

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

楼主的测试程序太短,建议加上volatile.
uc_efm32 发表于 2011-9-26 13:52 | 显示全部楼层
IAR 8051 8.10

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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
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,
 楼主| 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;
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也不敢用移位运算啊,只能调用库函数,所以结果正确!
liang7143 发表于 2011-9-26 15:02 | 显示全部楼层
真是BUG啊?
t.jm 发表于 2011-9-26 15:29 | 显示全部楼层
谁英文好的,去报告BUG吧,别说我们只知道用盗版,报告BUG也是做贡献啊!
endload 发表于 2011-9-26 15:57 | 显示全部楼层
ccmc 发表于 2011-9-26 15:59 | 显示全部楼层
本帖最后由 ccmc 于 2011-9-26 17:11 编辑

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

int型的运算竟然是对的,看了下汇编,没RRC
ccmc 发表于 2011-9-26 15:59 | 显示全部楼层
本帖最后由 ccmc 于 2011-9-26 16:19 编辑

我去试试MDK是不是也这样

结果如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
linbei1988 发表于 2011-9-26 16:38 | 显示全部楼层
谁英文好的,去报告BUG吧,别说我们只知道用盗版,报告BUG也是做贡献啊!
t.jm 发表于 2011-9-26 15:29

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

评分

参与人数 1威望 +1 收起 理由
499734424 + 1

查看全部评分

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

本版积分规则

222

主题

15494

帖子

34

粉丝
快速回复 在线客服 返回列表 返回顶部