当我尝试将 uint64_t 转换为 struct timeval 时,我得到一个负值? //编辑
I am getting a negative value when I try to convert a uint64_t to struct timeval? //edited
#include <iostream>
#include <sys/time.h>
#include <stdint.h>
void convert(uint64_t offset )
{
struct timeval t;
t.tv_sec = offset / 1000000;
std::cout << "currentTimeOffset " << offset << "startTimeOffset " << t.tv_sec << std::endl;
t.tv_usec = offset % 1000000;
std::cout << "stattime usec " << t.tv_usec << std::endl ;
}
int main(int argc , char** argv)
{
uint64_t t = 18446744073709551615;
convert(t );
return 0;
}
是否存在舍入误差?那我该怎么做呢?这是从代码转换中的其他地方调用的例程。我写了一个小脚本,其中有一个 uint64_t
的例子,它给我一个负数
offset / 1000000
生成的值 1.8446744073709551615 × 10^13
对于类型为 int32
的 tv_sec
来说太大了。可以存储在 int32
中的最大值是 2.147483647 × 10^9
.
您正在溢出存储结果的整数,它正在回绕并变为负数。
#include <iostream>
#include <sys/time.h>
#include <stdint.h>
void convert(uint64_t offset )
{
struct timeval t;
t.tv_sec = offset / 1000000;
std::cout << "currentTimeOffset " << offset << "startTimeOffset " << t.tv_sec << std::endl;
t.tv_usec = offset % 1000000;
std::cout << "stattime usec " << t.tv_usec << std::endl ;
}
int main(int argc , char** argv)
{
uint64_t t = 18446744073709551615;
convert(t );
return 0;
}
是否存在舍入误差?那我该怎么做呢?这是从代码转换中的其他地方调用的例程。我写了一个小脚本,其中有一个 uint64_t
的例子,它给我一个负数
offset / 1000000
生成的值 1.8446744073709551615 × 10^13
对于类型为 int32
的 tv_sec
来说太大了。可以存储在 int32
中的最大值是 2.147483647 × 10^9
.
您正在溢出存储结果的整数,它正在回绕并变为负数。