【发布时间】:2017-09-21 17:21:05
【问题描述】:
所以我有一个像这样的位域:
unsigned int foobar:1;
然后我使用此代码设置它
uint32_t code = loadCode();
structure.foobar = code & 2;
那么,如果 code 设置为 2,这是否意味着 foobar 设置为 1、0 或未定义?我使用的确切标准实际上是 C++11,而不是纯 C。
【问题讨论】:
-
在我看来这将是一个零......想想看。 2 = 0000010。您的位域是一位。如果你与你的二进制值相比较,那个位仍然被清除。
-
顺便说一句,这不是家庭作业,这是在代码审查中提出的,当时我们意识到我们团队中没有人知道这是否是标准定义的行为,不确定为什么会被否决。
-
@DavidHoelzer 这也是我的想法,但是 C++ 具有布尔转换的奇怪语义(即
x>0 = true),这可能也适用于位域 -
你在一段示例代码中试过了吗?
-
@Earlz 但是您的位域不是
bool类型,而是unsigned int类型。
标签: c++ c++11 bit-manipulation bit-fields