0
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 值,那么我将得到负值!像上面那样做有什么问题?

4

1 回答 1

1

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

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

于 2014-05-16T06:23:51.953 回答