gpt4 book ai didi

C++ 解释将 uint64 转换为 uint32

转载 作者:行者123 更新时间:2023-12-01 14:41:30 32 4
gpt4 key购买 nike

我正在尝试将 uint64_t(使用 boost chrono 高精度时钟表示从 D 日起以纳秒为单位的时间)到 uint32_t 以生成随机数生成器。
我只想要 uint64_t 的最低有效 32 位。这是我的尝试:

uint64_t ticks64 = dtn.count(); // This has the ticks in nanosec
uint64_t ticks32_manual = ticks64 & 0xFFFFFFFF;
uint32_t ticks32_auto = (uint32_t) ticks64;
mexPrintf("Periods: %llu\n", ticks64);
mexPrintf("32-bit manual truncation: %llu\n", ticks32_manual);
mexPrintf("32-bit automatic truncation: %u\n", ticks32_auto);
我的代码的输出如下:

Periods: 651444791362198

32-bit manual truncation: 1331774102

32-bit automatic truncation: 1331774102


我期望 32 位和原始 64 位表示的最后几位数字相同,但事实并非如此。也就是说,我认为我会“失去 64 位数字的左半部分”。
谁能解释一下这里发生了什么?谢谢。
顺便说一句,我见过 this link .

最佳答案

正如评论中所指出的,您的代码操作没有任何问题,只是您没有正确可视化输出。这是您的代码,已更正且可运行:

#include <cstdio>
#include <cstdint>

int main() {
uint64_t ticks64 = 651444791362198llu;
uint64_t ticks32_manual = ticks64 & 0xFFFFFFFF;
uint32_t ticks32_auto = (uint32_t) ticks64;

printf("Periods: %llX\n", ticks64);
printf("32-bit manual truncation: %llX\n", ticks32_manual);
printf("32-bit automatic truncation: %X\n", ticks32_auto);
}

输出是:
Periods: 2507C4F614296
32-bit manual truncation: 4F614296
32-bit automatic truncation: 4F614296

关于C++ 解释将 uint64 转换为 uint32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29404478/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com