记得以前,有地方可以设置char强制为无符号的,现在怎么找不到了?
我用的keil 9.0 限制版。
昨天,从厂家的代码里,复制了一点东西,结果BUG就出来了。
他们喜欢用char,而我一般用无符号的,因为项目就一点简单的控制算法,没要复杂的数**算,也不会出现负数。
if(0xFF!=*( char code *) ((xyz)) //无论 Enable ANSI interger promotion rules 是不是勾上,结果一样.
CLR A
MOVC A,@A+DPTR
MOV R7,A ;把值存入R7
RLC A ;以下三句汇编,计算A的符号,并存入R6,如果负数为FF
SUBB A,ACC
MOV R6,A
MOV A,R7 ;把值再取出来
CPL A
ORL A,R6 ;符号位也要是0
JZ Next
if(((char)0xFF)!=*( char code *) ((xyz))
CLR A
MOVC A,@A+DPTR
CPL A
JZ Next
if((0xFF)!=*(unsigned char code *) ((xyz))
CLR A
MOVC A,@A+DPTR
CPL A
JZ Next
上面三个写法,明显的后面两个满足我的想法,而第一个,实在无语的很了。
后面两个和FF比,都是把这个结果取反后和0比,比减法或者异火能省点代码。
再次问一下,怎么样才能即使符合搞错了,编译出来也是对的? |