【发布时间】:2019-04-04 12:33:10
【问题描述】:
我想在某些结构中使用标志,比如说:
struct {
flag1:1;
flag2:1;
flag3:1;
flag4:1;
}Flags;
标志 3 和 4 描述了我的目标项目的模式现在可以使用。我想将标志转换为数字以读取在 flag3 和 flag4 中设置的内容。 我要做的是:
uint8_t mode;
mode = ( ((uint8_t)Flags.flag4 << 1) | (uint8_t)Flags.flag3) );
让我吃惊的是它是这样工作的:
如果 flag4==1 且 flag3==1 'mode' 为 3
如果 flag4==1 和 flag3==0 'mode' 为 2 等等
我的问题是:为什么?我这样做是希望它有效,但我不知道为什么。
我在 Atollic 工作,负责 STM32 代码。
【问题讨论】:
-
您是在要求我们解释您自己的代码吗?无意冒犯。这只是一个问题。
-
flag3在一个位上怎么能包含2?
-
@Broman 我知道我写了什么,只是不知道为什么会这样。
-
@MrPromethee 打错字了,应该是 0
-
好的,我将添加一些解释: flag4=1 和 flag3=1 然后结构如下所示: 1100 如果我执行 flag4
标签: c casting structure data-conversion bit-fields