记一次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。

posted @ 2021-05-13 17:22  rec0rd  阅读(167)  评论(0编辑  收藏  举报