gpt4 book ai didi

c++ - 将大类型的值分配给小类型时是否需要位掩码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:28 26 4
gpt4 key购买 nike

假设我想将 uint32_t 的低 16 位存储在 Windows 上的 uint16_t 中,我也可以这样做

uint32_t value = 123456789;
uint16_t low1 = value; //like this
uint16_t low2 = value & 0xFFFF; //or this

结果似乎没有区别,但我找不到任何文档明确说明这是已定义的行为。在 X 或 Y 情况下会有所不同吗?或者这就是它的工作原理?

最佳答案

C++ 标准保证无符号类型的赋值和初始化为您提供模 2n 的值,其中 n 是无符号类型的值表示中的位。

在 Windows 中,所有位都参与值表示。

因此,使用位掩码除了在将来可能更改类型时设置一个小绊脚石外没有任何用处。


如果您绝对想使用口罩,例如为了避免来自过度热心的编译器的编译警告,那么您可以像这样以与类型无关的方式进行编译,假设类型是无符号的:

uint16_t low2 = value & uint16_t(-1);

这依赖于上述模 2n 保证。

关于c++ - 将大类型的值分配给小类型时是否需要位掩码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36234046/

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