打印

好像发现一个mdk的bug,大侠救助啊!

[复制链接]
1756|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wwwq|  楼主 | 2011-11-12 17:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
BUG, MDK, rc, dc, se
程序:
signed    char c1=-126;
    signed char c2=-3;
c2=c1+c2;
    if (c2>0)
       c1=88;
       else
       c1=77;
c2应该是负数,但是在mdk中c2=7F,是大于0的,因此c1成了88.明显不对啊?哪位大侠说一说。
沙发
auzxj| | 2011-11-12 17:32 | 只看该作者
本帖最后由 auzxj 于 2011-11-12 17:36 编辑

-126+-3=-129
对于signed 数据范围为:-128~127
-129是溢出的 你在编译的时候应该有警告
-129的十六进制表示是0xFF7F,把他强制赋给一个signed char数据,就取底位7F

使用特权

评论回复
板凳
wwwq|  楼主 | 2011-11-12 20:13 | 只看该作者
这里有个问题,就是mdk应该有个内部的控制办法,不能全交给用户啊

使用特权

评论回复
地板
李富贵| | 2011-11-12 20:39 | 只看该作者
C语言的魅力就在于把这个白痴型错误的控制权交给用户。

使用特权

评论回复
评论
smartmcu 2013-2-7 15:36 回复TA
这句话倒是很有道理,嚯嚯! 
5
wwwq|  楼主 | 2011-11-12 20:49 | 只看该作者
唉,好像也没有别的什么办法了,多仿真几次了

使用特权

评论回复
6
LDTEST| | 2011-11-12 21:06 | 只看该作者
C语言的魅力就在于把这个白痴型错误的控制权交给用户。
李富贵 发表于 2011-11-12 20:39

精彩!

使用特权

评论回复
7
auzxj| | 2011-11-12 22:07 | 只看该作者
自己C语言没学好还怪C语言本身。。。。
mdk的内部的控制办法就是给你输出警告,你自己不看,还怪编译器。。。
仿真一万次有毛用,原理都给你说了。。。
你把c2的数据类型定义为unsigned int 就行了。。。。

使用特权

评论回复
8
linqing171| | 2011-11-13 07:53 | 只看该作者
溢出了,如果用C#,会提示溢出的。如果用Delphi等上个世纪末的语言,在编译器选项里面也可以设置的,前提是CPU有溢出例外(Exception)。

如果用C语言的话,建议用float类型,一般几百几万的加减运算都不会溢出。如果实在不想用浮点库,还是用long long吧。

使用特权

评论回复
9
wwwq|  楼主 | 2011-11-13 08:15 | 只看该作者
为了节约ram,不得已采用char啊

使用特权

评论回复
10
zhang@long| | 2011-11-13 12:46 | 只看该作者
学习

使用特权

评论回复
11
hkjc007| | 2011-11-13 15:42 | 只看该作者
:victory: 1# wwwq

使用特权

评论回复
12
auzxj| | 2011-11-13 22:08 | 只看该作者
溢出了,如果用C#,会提示溢出的。如果用Delphi等上个世纪末的语言,在编译器选项里面也可以设置的,前提是CPU有溢出例外(Exception)。

如果用C语言的话,建议用float类型,一般几百几万的加减运算都不会溢出。如 ...
linqing171 发表于 2011-11-13 07:53


一看你就不是搞单片的。。。在PC上编程很爽吧。。。

使用特权

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

本版积分规则

20

主题

118

帖子

0

粉丝