发帖
8 0 0

uint64_t的奇怪现象

hdydy
论坛元老

32

主题

76

回帖

5483

积分

论坛元老

积分
5483
技术杂谈 1544 8 2024-7-1 19:49:38

printf打印uint64_t类型

    while(1) {
        ms = bflb_mtimer_get_time_ms();
        printf("%zu\n", ms);
        printf("%zu,%zu\n", ms, ms);
        printf("%zu,%zu,%zu\n", ms, ms, ms);
        printf("%zu,%zu,%zu,%zu\n", ms, ms, ms, ms);
        bflb_gpio_set(gpio, PIN_LED);
        bflb_mtimer_delay_ms(LED_MS);
        bflb_gpio_reset(gpio, PIN_LED);
        bflb_mtimer_delay_ms(LED_MS);
    }

image.png

谁能解释一下

──── 0人觉得很赞 ────

使用道具 举报

2024-7-1 20:09:41
        ms = 0x1111111133333333;
        printf("ms:%#x,%#x\n", (uint32_t)(ms>>32), (uint32_t)ms);
        printf("ms:%#x,%#x\n", ms, ms);
        printf("%zd\n", ms);
        printf("%zd,%zd\n", ms, ms);
        printf("%zd,%zd,%zd\n", ms, ms, ms);
        printf("%zd,%zd,%zd,%zd\n", ms, ms, ms, ms);

image.png

2024-7-2 08:29:16
猜测和数据放入堆栈的顺序有关,可以查看生成的汇编代码原因就清楚了。
2024-7-2 08:41:01

image.png

2024-7-2 08:43:49
这是哪个板子的情况?
2024-7-2 11:07:48
难道是32位架构原因?😄
2024-7-3 19:51:16
2024-7-4 22:50:52
看起来就是精度丢失了
2024-7-5 11:13:45

这个问题太深了,完全不懂呢。

您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28251 个
  • 话题数: 40215 篇