在32位的X86系统中,下面程序的输出结果是什么?
#include <stdio.h>
int main()
{
int x[2][2]={{1,-1}, {-10, 999}};
unsigned char *p=NULL;
int i=0;
p=(unsigned char *)x;
printf("%d\n", sizeof(x));
for(i=0; i<sizeof(x); i++) //sizeof(x)=16
printf("%02X", p[i]);
printf("\n");
return 0;
}
结果:
01000000FFFFFFFFF6FFFFFFE7030000
分析:
%02X是按照16进制大写输出,
1转换为16进制还是1,按照指定格式输出为01000000
-1转换为16进制为FFFFFFFF,
-10转换为16进制为F6FFFFFF,
999转为为无符号类型的数后结果为231(高位溢出),999/256=3,将03补充到高位,即E7030000.