#include <ctime>
#include <cstdio>
#include <sys/time.h>
#include <iostream>
using namespace std;
int main() {
struct timeval tv;
gettimeofday(&tv, 0);
unsigned long long int var=tv.tv_sec*1000L+tv.tv_usec/1000L;
cout<<sizeof(var)<<endl;
cout<<var<<endl;
printf("%u%-15u\n", (unsigned int)(var/1000000000), (unsigned int)(var%1000000000));
return 0;
}
这件事打印
8
1341143123970
1341143123970
在我的64位机器上,但是
8
1113191712
1113191712
在我的32位服务器上。第二个结果显然是钳位到32位数,但无符号long long int在两个架构上都是8个字节。那么夹紧发生在哪里,为什么?
答案 0 :(得分:4)
这是因为{32}和64位计算机上long
的宽度不同。 tv_sec
的类型是算术类型,通常是 1) long
。
您可以使用1000ULL
代替1000L
来确保使用64位类型进行乘法:
unsigned long long int var=tv.tv_sec*1000ULL+tv.tv_usec/1000ULL;
<小时/> <子> 1)例如,在
glibc
上,它是long
。 "In the GNU C library, time_t is equivalent to long int"
http://www.gnu.org/software/libc/manual/html_node/Simple-Calendar-Time.html
子>