记一次char和常量数字比较的坑
直接上代码:
#include <stdio.h>
int main(){
int a = 0xb9b9b9b9;
char *ptr = (char *)&a;
if(*ptr == 0xb9) printf("haha\n");
}
#include <stdio.h>
int main(){
int a = 0xb9b9b9b9;
char *ptr = (char *)&a;
if(*ptr == (char)0xb9) printf("haha\n");
}
观看汇编可发现,默认的常量数字编译器会处理为int,和另一个变量char比较的时候,编译器要把char扩展成int再比较,由于char是有符号的,故而进行了符号扩展:
所以,这种情况下要使用unsigned char。
总结:char变量和常量数字比较时要用unsigned char。