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

[复制链接]
 楼主| 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 | 显示全部楼层
那| &也都有整形提升,岂不是我都要做强制类型转换?
香水城 发表于 2009-8-17 10:04 | 显示全部楼层
你可以自己想一想,| & 的整型提升与 ~ 有什么不同。
 楼主| cgha 发表于 2009-8-17 10:07 | 显示全部楼层
知道了,多谢香版和void_c。看来我以后如果想用~要小心点,呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

561

主题

719

帖子

0

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

561

主题

719

帖子

0

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