stcosmic编译器得不到正确结果

chukaihua   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
比较的是字节,结果执行的是比较字指令。

回复评论 (5)

你看看手册,取反操作的数据类型是什么?

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

试试使用强制类型转换: if(SMB_DATA_IN[0]!= (unsigned char)~SMB_DATA_IN[1])
点赞  2009-8-15 21:55
根据标准C,~运算有整形提升。

楼主自己没理解好C语言。
点赞  2009-8-16 08:07
                                 那| &也都有整形提升,岂不是我都要做强制类型转换?
点赞  2009-8-17 09:47
                                 你可以自己想一想,| & 的整型提升与 ~ 有什么不同。
点赞  2009-8-17 10:04
                                 知道了,多谢香版和void_c。看来我以后如果想用~要小心点,呵呵。
点赞  2009-8-17 10:07
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复