我有一个 typedefed 结构和一个联合。联合包含结构和单个uint32_t
. foo
目标是为结构中的“位”分配一个值。
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef struct {
uint32_t valA :1;
uint32_t valB :1;
uint32_t valC :1;
uint32_t valD :1;
uint32_t valE :1;
} ValStruct_Type;
typedef union {
ValStruct_Type valStruct;
uint32_t valUint;
} ValUnion_Type;
uint32_t foo = 0;
int main(void)
{
ValStruct_Type Vals;
Vals.valA = 0x0;
Vals.valB = 0x1;
Vals.valC = 0x0;
Vals.valD = 0x1;
Vals.valE = 0x1;
ValStruct_Type *Vals_ptr;
Vals_ptr = &Vals;
foo = ((ValUnion_Type *)Vals_ptr)->valUint;
return 0;
}
foo 变为:
Decimal: 4194330
Hex: 0x40001a
Binary: 10000000000000000011010
谁能准确地解释这里发生了什么(指向结构指针的联合指针,尊重联合成员?)?
其次:为什么foo
除了第 1,3 和 4 位之外还有 set 的第 22 位?