读书人

char printf %x有关问题

发布时间: 2012-09-27 11:11:17 作者: rapoo

char printf %x问题
char sOption[5];
memset(sOption,0x80,5);
for(i=0;i<5;i++)
printf("\nsOption[%d]=%x\t",i,sOption[i]);

打印出来的是
sOption[0]=ffffff80
sOption[1]=ffffff80
sOption[2]=ffffff80
sOption[3]=ffffff80
sOption[4]=ffffff80

unsignedchar sOption[5];
memset(sOption,0x80,5);
for(i=0;i<5;i++)
printf("\nsOption[%d]=%x\t",i,sOption[i]);

打印出来的是
sOption[0]=80
sOption[1]=80
sOption[2]=80
sOption[3]=80
sOption[4]=80

为什么前面那种方式会打印前面的FFFFFF呢?

[解决办法]
%d都会扩展为int类型,0x80的符号位为1,所以做符号扩展的时候,无符号数前面填充0为00000080,有符号数前面填充1为ffffff80。

读书人网 >C语言

热点推荐