#include <stdio.h>
int main() {
char a = 0xb6; //182
short b = 0xb600;
int c = 0xb6000000;
char* pa = &a;
short* pb = &b;
int* pc = &c;
// 在比较时,因为a是char类型,是有符号数,所以把0xb6也要理解成有符号数
// 所以,编译器把 0xb6作为int数据处理, 高位全部补符号位,负数符号位是1(1表示负数)
// 0xb6的符号位,其实就是这两个字节的最高位,0xb6就是二进制10110110, 最高位是1
// 所以就把0xb6扩展成0xffffffb6
// if (a == 0xb6) 不成立
// 但是 if (a == 0xffffffb6) 成立!
if (a == 0xb6) printf("a");
// 同理, if (b == 0xffffb600)才成立
if (b == 0xb600) printf("b");
// 0xb6000000已经有32位了,不会再扩展,所以该判断成立
if (c == 0xb6000000) printf("c");
}
关于整形提升
猜你喜欢
转载自blog.csdn.net/qq_36394394/article/details/105669022
今日推荐
周排行