Please explain the output of below program....
int main()
{
unsigned int i=0,j=0;
char c = 'J';
i = (unsigned int) c;
i|=(unsigned int) (c+1)<<8;
i|= (unsigned int) (c+2) <<16;
i|= (unsigned int) (c+3) <<24;
printf("\n%s",&i);
}
上述程序的输出显示为JKLM请解释原因??
答案 0 :(得分:7)
Standardese挑剔答案:因为你的程序有未定义的行为。 %s
转换说明符需要char *
或unsigned char *
参数,但您可以将unsigned int *
传递给它。
幕后回答:您的机器可能是小端,因此最低有效字节的内存地址最低。
答案 1 :(得分:3)
您的系统似乎是小端(http://en.wikipedia.org/wiki/Endianness)。这意味着最低有效字节(没有移位的字节)是%s期望的字符数组中的第一个字节。