如下
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
比较的是字节,结果执行的是比较字指令。
你看看手册,取反操作的数据类型是什么?
从你列出的代码看,取反操作的数据类型是整数类型;你给出了字符类型,编译器自动地帮你转换到了整数类型,所以产生这样的结果。
试试使用强制类型转换: if(SMB_DATA_IN[0]!= (unsigned char)~SMB_DATA_IN[1])
根据标准C,~运算有整形提升。
楼主自己没理解好C语言。
那| &也都有整形提升,岂不是我都要做强制类型转换?
你可以自己想一想,| & 的整型提升与 ~ 有什么不同。
知道了,多谢香版和void_c。看来我以后如果想用~要小心点,呵呵。