当我尝试将uint64_t转换为struct timeval时,我得到一个负值? //编辑

时间:2015-04-28 17:18:15

标签: c++ uint64 timeval

#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的例子给了我一个负数

1 个答案:

答案 0 :(得分:2)

offset / 1000000生成的值1.8446744073709551615 × 10^13对于类型为tv_sec的{​​{1}}来说太大了。可存储在int32中的最大值为int32

你将存储结果的整数溢出,并且它正在四处转动并变为负数。