打印

st cosmic编译器得不到正确结果

[复制链接]
2399|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cgha|  楼主 | 2009-8-15 17:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下
main.c:270     if(SMB_DATA_IN[0]!= ~SMB_DATA_IN[1])
0x85ce  CLRW  X                   CLRW  X
0x85cf  LD    A,0x91              LD    A,0x91
0x85d1  LD    XL,A                LD    XL,A
0x85d2  CPLW  X                  CPLW  X
0x85d3  LD    A,0x90            LD    A,_SMB_DATA_IN
0x85d5  CLRW  Y                  CLRW  Y
0x85d7  LD    YL,A                LD    YL,A
0x85d9  LDW   0xa5,Y           LDW   0xa5,Y
0x85dc  CPW   X,0xa5            CPW   X,0xa5
0x85de  JRNE  0x85c8            JRNE  0x85c8
比较的是字节,结果执行的是比较字指令。
沙发
香水城| | 2009-8-15 21:55 | 只看该作者
你看看手册,取反操作的数据类型是什么?

从你列出的代码看,取反操作的数据类型是整数类型;你给出了字符类型,编译器自动地帮你转换到了整数类型,所以产生这样的结果。

试试使用强制类型转换: if(SMB_DATA_IN[0]!= (unsigned char)~SMB_DATA_IN[1])

使用特权

评论回复
板凳
void_c| | 2009-8-16 08:07 | 只看该作者
根据标准C,~运算有整形提升。

楼主自己没理解好C语言。

使用特权

评论回复
地板
cgha|  楼主 | 2009-8-17 09:47 | 只看该作者
那| &也都有整形提升,岂不是我都要做强制类型转换?

使用特权

评论回复
5
香水城| | 2009-8-17 10:04 | 只看该作者
你可以自己想一想,| & 的整型提升与 ~ 有什么不同。

使用特权

评论回复
6
cgha|  楼主 | 2009-8-17 10:07 | 只看该作者
知道了,多谢香版和void_c。看来我以后如果想用~要小心点,呵呵。

使用特权

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

本版积分规则

561

主题

719

帖子

0

粉丝