整数类型大小问题

时间:2012-07-01 11:48:08

标签: c++ 32bit-64bit

#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个字节。那么夹紧发生在哪里,为什么?

1 个答案:

答案 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