以下一段代码在Turbo C中运行时为何单字节char型变量按%x输出时会出现四个十六进制数字?

来源:百度知道 编辑:UC知道 时间:2024/07/07 04:03:35
#include<stdio.h>
void main()
{
char c[2]={0,0};
short int n=0xab12;
char *p=(char *)&n;
c[0]=*p;
c[1]=*(p+1);
printf("\nvalue of p:%x",p);
printf("\nvalue of n:%x",n);
printf("\nvalue of p+1:%x",p+1);
printf("\naddress of n:%x",&n);
printf("\naddress of c[0]:%x\naddress of c[1]:%x",&c[0],&c[1]);
printf("\nvalue of c[0]:%2x\nvalue of c[1]:%2x",c[0],c[1]);
printf("\n%d%d",sizeof(c[0]),sizeof(c[1]));
}
value of p:ffd0
上面的运行结果是:
value of n:ab12
value of p+1:ffd1
address of n:ffd0
address of c[0]:ffce
address of c[1]:ffcf
value of c[0]:12
value of c[1]:ffab /* 此处我不知道为什么会出现两个f */
value of c[1]:febb
11
十分感谢谁能帮帮忙啊!先谢谢了

char 是有符号的,0xab是一个负值,tubo c下用16进制表示就是0xffab,如果是32位编译就是0xffffffab

定义unsigned char c[2]或者打印的时候用%d,你就会明白