C语言指针强转解引用

新手上路,请多包涵

unsigned int a = 0xfffffff7;

char* p = (char*)&a;
printf("%x\n", *p);
return 0;

输出结果是 fffffff7

unsigned int a = 0xfffffff7;
unsigned char* p = (unsigned char*)&a;
printf("%x\n", *p);
return 0;

输出结果是 f7

这是为什么呢?

阅读 3.6k
1 个回答

%x 按无符号数输出, char 是有符号的认为 0xf7 是负数, 负数用补码表示. 请参阅原码 反码 补码的相关概念.

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