首页
社区
课程
招聘
为何会出现这个问题
QZ2019 2022-6-26 1156

收藏
1条回答
0346954 2022-7-1 2022-7-1编辑

因为0x88 0x99 0xff 都是负数,如0x88 二进制为1000 1000 作为一个char的话 属于负数,0x88是一个字节的数据,调用printf时,0x88需要扩展为4字节的数据(如果是32位程序的话),扩展时0x88高位为1 所以高位三字节都补1,查看汇编代码如下:
图片描述

 

如果想正常输出,可以在printf中让0x88作为一个unsigned char输出如printf("0x%x\n", unsigned char(0x88)); 如下:
图片描述

回复