首页 > 声明无符号和有符号char,减1之后,用%u打印出来结果不一致是为什么呢?

声明无符号和有符号char,减1之后,用%u打印出来结果不一致是为什么呢?

#include <stdio.h>

int main() {
    char a = 0;
    unsigned char b = 0;
    --a;
    --b;
    printf("char a = %u \n",  a);
    printf("Unsigned char is %u", b);
    
    
    return 0;
}

运行结果:

char a = 4294967295
Unsigned char is 255

char 和 unsigned char 在传给 printf 时会自动提升为 int 类型。
因为 char 是带符号数字类型,所以会进行符号拓展。a 从 0xFF 拓展为 0xFFFFFFFF (4294967295)。
unsigned char 则会进行零拓展,b 从 0xFF 拓展为 0x000000FF (255)。


#include <stdio.h>
#include <stdlib.h>

int main() {
    char a = 0;
    unsigned char b = 0;
    --a;
    --b;
    //类型转换 %u 应该是按4字节整数输出 printf应该有隐式类型转换
    int i = a;

    printf("char a = %u \n", i);
    printf("Unsigned char is %u", b);

    system("pause");
    return 0;
}
【热门文章】
【热门文章】