long long int my64 = 0x0000000100000002;
int my32 = 0x00000003;
printf("%d, %d\n",my64, my32); //希望输出2,3; 实际输出2,1
printf("%lld, %d\n",my64, my32); //正确输出
如果将0x0000000100000002写入到以0x0000开始的内存中,则结果为
内存地址 little-endian
0x0000 0x02
0x0001 0x00
0x0002 0x00
0x0003 0x00
0x0004 0x01
0x0005 0x00
0x0006 0x00
0x0007 0x00
上述代码中第一个printf取两个4字节整形输出,所以第一个8字节整形被当做两个4字节整形,由于是little-endian,低32位当做第一个4字节整形,高32位被当做第二个4字节整形。
64位整形需要用%lld来输出,如第二个printf。