开发者社区 问答 正文

声明无符号和有符号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

展开
收起
a123456678 2016-06-08 19:59:35 2229 分享 版权
1 条回答
写回答
取消 提交回答
  • char 和 unsigned char 在传给 printf 时会自动提升为 int 类型。
    因为 char 是带符号数字类型,所以会进行符号拓展。a 从 0xFF 拓展为 0xFFFFFFFF (4294967295)。
    unsigned char 则会进行零拓展,b 从 0xFF 拓展为 0x000000FF (255)。

    2019-07-17 19:32:37
    赞同 展开评论
问答标签:
问答地址: