因为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)); 如下: