#ifdef _MSC_VER
typedef __int64 Int64;
typedef unsigned __int64 UInt64;
#else
typedef long long int Int64;
typedef unsigned long long int UInt64;
#endif
UInt64 tmp = (1024*1024*1024); // 1G ,这个正常
UInt64 tmp1 = (10*1024*1024*1024); // 10G,这个tmp1 将被赋予 0
typedef __int64 Int64;
typedef unsigned __int64 UInt64;
#else
typedef long long int Int64;
typedef unsigned long long int UInt64;
#endif
UInt64 tmp = (1024*1024*1024); // 1G ,这个正常
UInt64 tmp1 = (10*1024*1024*1024); // 10G,这个tmp1 将被赋予 0
UInt64 tmp1 = (10*1024*1024*1024); //18446744071562067968
UInt64 tmp2 = (100*1024*1024*1024);//0
10*1024*1024*1024的32位运算结果为0x80000000.就是1010左移30位的结果.
所以你运算时要在第一个常数前加(UInt64)转换为64位的运算.