gpt4 book ai didi

c++ - 整数类型大小问题

转载 作者:行者123 更新时间:2023-11-27 23:23:20 25 4
gpt4 key购买 nike

#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 位数字,但 unsigned long long int 在两种架构上都是 8 字节。那么夹紧发生在哪里,为什么?

最佳答案

这是因为 long 的宽度在你的 32 位和 64 位机器上不一样。 tv_sec的类型是算术类型,通常是1) long

您可以使用 1000ULL 而不是 1000L 来确保使用 64 位类型完成乘法:

unsigned long long int var=tv.tv_sec*1000ULL+tv.tv_usec/1000ULL;


<子>1) 例如在 glibc上,是 long“在 GNU C 库中,time_t 相当于 long int” http://www.gnu.org/software/libc/manual/html_node/Simple-Calendar-Time.html

关于c++ - 整数类型大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11281697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com