【问题标题】:why am I getting a negative value in taking a timestamp?为什么我在获取时间戳时会得到负值?
【发布时间】:2014-07-04 19:31:54
【问题描述】:
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 值,那么我得到的是负值!! 像上面那样做有什么问题??

【问题讨论】:

    标签: c linux time timestamp uint32


    【解决方案1】:

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

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

    【讨论】:

    • 如果你把它改成 %lu 你不会得到负值。但是算术溢出的问题可能会导致你得到错误的值。
    猜你喜欢
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    相关资源
    最近更新 更多