如何在 C 中的结构中打印长度为 8 的多个位字段
How to print multiple bit-fields of length 8 in a struct in C
我想在下面的结构中打印位域的位表示。然而,当我打印内容时,我只是一遍又一遍地看到第一个位域的值。我究竟做错了什么?
#include <stdio.h>
#include <limits.h>
typedef struct Bits {
union BitUnion {
unsigned int op1 : 8;
unsigned int op2 : 8;
unsigned int op3 : 8;
unsigned int op4 : 8;
int num;
} BitUnion;
} Bits;
void printBitNum(Bits b);
int main() {
Bits test;
test.BitUnion.op1 = 2;
test.BitUnion.op2 = 5;
test.BitUnion.op3 = 'd';
test.BitUnion.op4 = 10;
printBitNum(test);
return 0;
}
void printBitNum(Bits b) {
int i;
for (i = (CHAR_BIT * sizeof(int)) - 1; i >= 0; i--) {
if (b.BitUnion.num & (1 << i)) {
printf("1");
} else {
printf("0");
}
}
printf("\n");
}
union
表示所有成员共享同一个地址。所以 op1
、op2
、op3
和 op4
都命名相同的内存位置。
因此您的代码将该位置设置为 10
,然后尝试打印出大部分未初始化的变量。
我猜你打算让联合有两个成员:int
和一个包含四个位域的结构。
我想在下面的结构中打印位域的位表示。然而,当我打印内容时,我只是一遍又一遍地看到第一个位域的值。我究竟做错了什么?
#include <stdio.h>
#include <limits.h>
typedef struct Bits {
union BitUnion {
unsigned int op1 : 8;
unsigned int op2 : 8;
unsigned int op3 : 8;
unsigned int op4 : 8;
int num;
} BitUnion;
} Bits;
void printBitNum(Bits b);
int main() {
Bits test;
test.BitUnion.op1 = 2;
test.BitUnion.op2 = 5;
test.BitUnion.op3 = 'd';
test.BitUnion.op4 = 10;
printBitNum(test);
return 0;
}
void printBitNum(Bits b) {
int i;
for (i = (CHAR_BIT * sizeof(int)) - 1; i >= 0; i--) {
if (b.BitUnion.num & (1 << i)) {
printf("1");
} else {
printf("0");
}
}
printf("\n");
}
union
表示所有成员共享同一个地址。所以 op1
、op2
、op3
和 op4
都命名相同的内存位置。
因此您的代码将该位置设置为 10
,然后尝试打印出大部分未初始化的变量。
我猜你打算让联合有两个成员:int
和一个包含四个位域的结构。