This ex. will not work
char data test; char TestF(void); char TestF(void) { if (test == 0x8A) { //... return(1); } } //Take a look at the Assambly code ; FUNCTION TestF (BEGIN) ; SOURCE LINE # 5 ; SOURCE LINE # 6 ; SOURCE LINE # 7 R MOV R7,test MOV A,R7 RLC A SUBB A,ACC MOV R6,A MOV A,R7 XRL A,#08AH ORL A,R6 R xJNZ ?C0002 ; SOURCE LINE # 8 ; SOURCE LINE # 10 MOV R7,#01H ; SOURCE LINE # 11 ; SOURCE LINE # 12 ?C0002: RET
char data test; char TestF(void); char TestF(void) { if (test == (char)0x8A) { //... return(1); } } //Take a look at the Assambly code ; FUNCTION TestF (BEGIN) ; SOURCE LINE # 5 ; SOURCE LINE # 6 ; SOURCE LINE # 7 R MOV A,test R xJNE A,#08AH,?C0002 ; SOURCE LINE # 8 ; SOURCE LINE # 10 MOV R7,#01H ; SOURCE LINE # 11 ; SOURCE LINE # 12 ?C0002: RET
Ok I can understand that but if I write this
1 char data test; 2 3 char TestF(void); 4 5 char TestF(void) 6 { 7 1 if (test == -118) 8 1 { 9 2 //... 10 2 return(1); 11 2 } 12 1 } 13 14 CX51 COMPILER V7.09 TEST 03/04/2004 11:59:16 PAGE 2 ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION TestF (BEGIN) ; SOURCE LINE # 5 ; SOURCE LINE # 6 ; SOURCE LINE # 7 R MOV A,test R xJNE A,#08AH,?C0002 ; SOURCE LINE # 8 ; SOURCE LINE # 10 MOV R7,#01H ; SOURCE LINE # 11 ; SOURCE LINE # 12 ?C0002: RET
hi, And we can see that -118 = 0x8a. Soo why can't i compare a signed char to an nagative hex value? Ofcourse you may! But then type: if (test == -0x76) Just indicate to compiler that value is negative!! Regards, Oleg
Thanks Now I'm satisfied /Ingo
...and another way: if you for some reason need to compare signed value as not signed one then you may use something like: if ((unsigned char)test == 0x8A) So, my previous post shows you how compare signed variable with signed (here: negative) number, this example above shows how to compare signed variable as unsigned one. In any case, it is your work to say to compiler about types conversion. Regards, Oleg