问题描述
当 char c= 0x80; printf("%x\n", c);打印结果是ffffff80
原因分析:
因为 char的取值范围是 -128 到127. 当定义char c = 128时, 已经溢出。c 在内存中的二进制为1000 0000, 最高位是符号位, 1是表示负数,用 %x 打印的时候,会自动扩展为32bit 的有符号数的形式,那么就会在前面填充 24 个 1, 就是 ffffff80
当 char c= 0x80; printf("%x\n", c);打印结果是ffffff80
因为 char的取值范围是 -128 到127. 当定义char c = 128时, 已经溢出。c 在内存中的二进制为1000 0000, 最高位是符号位, 1是表示负数,用 %x 打印的时候,会自动扩展为32bit 的有符号数的形式,那么就会在前面填充 24 个 1, 就是 ffffff80