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值,那么我会得到负值!! 上面这样做有什么不对?
答案 0 :(得分:1)
你的b大于2 ^ 31。 Printf格式"%ld"表示您要打印有符号整数,printf将最高位的数字解释为负整数。使用"%lu"而不是"%ld"。
另外,在查看代码时,a*1000000
的数值很可能溢出最大可能值。在你的情况下,我建议使用另一个函数来获得微秒时间,例如gettimeofday
并将结果存储在64位整数中。