关于整形提升

#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");
}
原创文章 6 获赞 5 访问量 174

猜你喜欢

转载自blog.csdn.net/qq_36394394/article/details/105669022