#include<iostream>
using namespace std;
int main()
{
long long int a = 0x1200340056007800;
long long int b = 0xABCDEF;
long long int c = 0x123456;
char d = 0x10;
long long int e = 0xAB00CD00EF00BB00;
long long int f = 0x112233;
char str[64];
printf("%I64d--%I64d--%I64d\n", a , b, c);
printf("%lld--%lld--%lld\n", a , b, c);
printf("%llx--%llx--%llx\n", a , b, c);
printf("%I64x--%I64x--%I64x\n", a , b, c);
printf("%d--%d--%d\n", a , b, c);
printf("%x--%x--%x\n", a , b, c);
sprintf(str, "%x--%llx--%llx", d, e, f);
sprintf(str, "%x--%x--%x", d, e, f);
printf("%s\n", str);
while(1);
}
/*********************************************************************************
long long int a = 1;
long long int b = 2;
printf("%d %d\n", a , b);
printf首先把b压栈,然后把a压栈(都是8个字节)。运行时遇到第一个%d,取4个字节,
堆栈在内存中是从高地址向低地址扩展, 由于intel采用小端序,先取出4个字节实际是a的低4个字节。
再遇到一个%d,又取4个字节,实际是a的高4个字节,因此无论b如何变化,第二个%d总是打印0。
“%d”表示按十进制整型输出; int
“%ld”表示按十进制长整型输出; long int
VC下两者数据长度没有区别 都是32bit
printf 输出 long long,使用%I64d 或%lld (注意Windows /Linux区别)
*********************************************************************************/