将 uint64 转换为 uint32 并截断

Casting uint64 to uint32 and truncation

提问人:SomeoneWithPassion 提问时间:4/29/2023 最后编辑:Remy LebeauSomeoneWithPassion 更新时间:4/30/2023 访问量:115

问:

当我们将 an 转换为 时,我通过读取 cppreference 看到截断发生了。uint64_tuint32_t

但是,哪些位被截断了?更高还是更低? 这是如何决定的,为什么?

C++ 无符号 截断

评论


答:

4赞 user17732522 4/29/2023 #1

结果值是等于原始模 232 的唯一值,可以用 表示。换言之,仅保留值的 base-2 表示形式中的 32 个最低有效位,而所有其他位(在本例中为 32 个最高有效位)将被截断。uint32_t

这些位在对象表示中是高还是低(或两者都不是)是实现定义的,并且尤其取决于体系结构的Endianess。uint64_t

评论

0赞 Mark Ransom 4/29/2023
模 2³² 将为您提供最低有效位,而不是最高有效位。
0赞 user17732522 4/29/2023
@MarkRansom 是的,但我看不出这与我回答的其余部分不一致?
0赞 SomeoneWithPassion 4/29/2023
哦,我明白了,我错过了那部分。谢谢!
0赞 Mark Ransom 4/29/2023
如果你的答案是否一致,为什么它完全是错误的?
1赞 user17732522 4/29/2023
@Wyck 否,在 C 和 C++ 中始终精确指定到无符号类型的整数转换。