Я получаю отрицательное значение при попытке преобразовать uint64_t в структуру 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

Решение

offset / 1000000 производит значение 1.8446744073709551615 × 10^13 который слишком велик для tv_sec который имеет тип int32, Максимальное значение, которое может быть сохранено в int32 является 2.147483647 × 10^9,

Вы переполняете целое число, в котором сохраняете результат, и оно оборачивается и становится отрицательным.

2

Другие решения


По вопросам рекламы [email protected]