为什么我在获取时间戳时会得到负值?

时间:2014-05-16 06:12:31

标签: c linux time timestamp uint32

Uint64_t a;
Uint32 b;

a= clock_cycles();
b= uint32((a*1000000)/(SYSPAGE_ENTRY(qtime)->cycles_per_sec));
printf("RECEIVE from Time in microseconds: %ld\n",  b);

我创建了变量并获取时间戳并将其转换为uint32,如上面的代码所示。

如果我打印b值,那么我会得到负值!! 上面这样做有什么不对?

1 个答案:

答案 0 :(得分:1)

你的b大于2 ^ 31。 Printf格式"%ld"表示您要打印有符号整数,printf将最高位的数字解释为负整数。使用"%lu"而不是"%ld"。

另外,在查看代码时,a*1000000的数值很可能溢出最大可能值。在你的情况下,我建议使用另一个函数来获得微秒时间,例如gettimeofday并将结果存储在64位整数中。