请告诉我们为什么以下程序的输出是KLM?而不是MLK?

时间:2013-09-21 06:21:26

标签: c unix bitwise-operators shift

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请解释原因??

2 个答案:

答案 0 :(得分:7)

Standardese挑剔答案:因为你的程序有未定义的行为。 %s转换说明符需要char *unsigned char *参数,但您可以将unsigned int *传递给它。

幕后回答:您的机器可能是小端,因此最低有效字节的内存地址最低。

答案 1 :(得分:3)

您的系统似乎是小端(http://en.wikipedia.org/wiki/Endianness)。这意味着最低有效字节(没有移位的字节)是%s期望的字符数组中的第一个字节。