我试图通过组合我拥有的多个无符号int值,在C中创建32位地址。这些多个值很重要,需要全部存储在1 32位地址中。
例如:假设我有unsigned int outer = 25,unsigned int inner = 984,unsigned int offset = 3241。外部int在32位地址中有10位顶位,内部int在32位地址中有10位中间位,偏移量有其余12位来存储其编号。
它看起来应该是:
OUTER | INNER | OFFSET
10 10 12 = 32 bit address我知道,在这个例子中,外部和内部into可以存储0- 2^10-1的值,偏移量可以存储0- 2^12-1的值,但是对于这些值,我不知道如何根据它们在32位地址内的位数来分割它们,然后将所有信息伪造/合并到整个地址中。
发布于 2020-04-01 23:18:13
请按@ Answer 3386109回答:
address = (outer << 22) | (inner << 12) | offset;发布于 2020-04-01 23:12:44
不确定这是否符合你的目标,但如果你允许的话,你可以为这样的目标制定一个结构。
typedef struct {
union {
struct {
unsigned int offset : 12;
unsigned int outer : 10;
unsigned int inner : 10;
} bits;
unsigned int address;
}
} Address;
int main() {
Address a;
a.bits.offset = 3241;
a.bits.inner = 25;
a.bits.outer = 984;
printf("outer: %u\ninner: %u\noffset: %u\naddress: %08x", a.bits.outer,
a.bits.inner, a.bits.offset, a.address);
return 0;
}输出
outer: 984
inner: 25
offset: 3241
address: 067d8ca9 尽管这取决于特定体系结构和编译器的枚举和位字段的处理。
https://stackoverflow.com/questions/60981446
复制相似问题