gpt4 book ai didi

c++ - 将最大值分配给位域的可移植方法

转载 作者:太空宇宙 更新时间:2023-11-04 16:05:41 24 4
gpt4 key购买 nike

假设我有一个这样的位域:

struct SomeStruct {
uint32_t first : 12;
uint32_t second : 2;
uint32_t third : 18;
};

SomeStruct obj;

我要分配

obj.second = 3;  // Actually, the maximum allowed value

实现此目的的可移植方法是什么?我也不想明确使用已知的位域宽度。

我用的代码

obj.second = std::numeric_limits<uint32_t>::max()

但与 -Wbitfield-constant-conversion 碰撞给出警告并 cpp reference states:

The following properties of bit fields are implementation-defined The value that results from assigning or initializing a bit field with a value out of range, or from incrementing a bit field past its range.

分配 -1 也是如此或 numeric_limits<uint32_t>::max()实际上是可移植的还是有任何其他方式?

最佳答案

由于字段是无符号的,工作很简单:

obj.second = -1;

无符号算术被明确定义为环绕,即使对于位域也是如此。

关于c++ - 将最大值分配给位域的可移植方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36083751/

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