为什么c语言的char类型变成了4字节?

#include<stdio.h>
int main()
{
    char c=-2; 
    //sizeof(c)=1 8个位
    //有符号补码 应该是
    //1111 1110=0xFE 
    printf("%d\n",sizeof(c));
    printf("%x",c);
    //输出为  FFFF FFFE  为什么? 
    
    return 0;
}
阅读 4.4k
2 个回答

我这里并没有变4字节,难道是系统或者编译器的问题?
输出为 FFFF FFFE 为什么?
%x 不会输出负数,至于为什么....我查到的资料是

如果使用%x和%o输出时,应该先把你的数据转为二进制的形式,然后再转为8进制或者是16进制,这样转出来的数是不会带+-号的,而是根据实际在内存中存放的数据来显示

当我输出无符号的时候,-2的值是4294967294,转换成十六进制就是0xffffffe

图片描述

如果打印的是char,应该在格式说明里加入长度描述符hh

printf("%hhx\n", c);

更多长度描述符(hh,h,l,ll ...)参考这里

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题