#include <stdio.h>
int main(int argc, char *argv[])
{
printf("%x
", (unsigned int)(unsigned char)0x80);
printf("%x
", (unsigned int)(signed char)0x80);
return 0;
}
输出:
80
ffffff80
第一个输出80
可以理解,毕竟是从0x80
转换为无符号int。
第二个输出ffffff80
我无法理解,从1字节数据扩展为4字节数据,并且是扩展到无符号类型,为什么符号位也跟着扩展了?
P.S. C/C++中输出结果一致
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…