uint64_t的奇怪现象

[复制链接]
查看1301 | 回复0 | 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

谁能解释一下

回复

使用道具 举报

hdydy | 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

回复 支持 反对

使用道具 举报

bzhou830 | 2024-7-2 08:29:16 | 显示全部楼层
猜测和数据放入堆栈的顺序有关,可以查看生成的汇编代码原因就清楚了。
选择去发光,而不是被照亮
回复 支持 反对

使用道具 举报

bzhou830 | 2024-7-2 08:41:01 | 显示全部楼层

image.png

选择去发光,而不是被照亮
回复 支持 反对

使用道具 举报

爱笑 | 2024-7-2 08:43:49 | 显示全部楼层
这是哪个板子的情况?
用心做好保姆工作
回复 支持 反对

使用道具 举报

WT_0213 | 2024-7-2 11:07:48 | 显示全部楼层
难道是32位架构原因?😄
回复 支持 反对

使用道具 举报

iiv | 2024-7-3 19:51:16 | 显示全部楼层
回复

使用道具 举报

jkernet | 2024-7-4 22:50:52 | 显示全部楼层
看起来就是精度丢失了
回复 支持 反对

使用道具 举报

xktx09 | 2024-7-5 03:11:54 | 显示全部楼层
牛的
回复

使用道具 举报

lazy | 2024-7-5 11:13:45 | 显示全部楼层

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

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则