使用for循环的结构位字段数据操作

时间:2017-11-30 14:05:19

标签: c struct bit-fields

使用结构声明了一个字符变量。我想访问(读取和写入)该字符类型变量的所有位。我用Bit Field解决了这个问题。代码如下。但如果我想打印它们,应该单独调用它们。我无法循环调用它们。

#include<stdio.h>
struct SevenSegmentValue
{
  unsigned char bit0:1;
  unsigned char bit1:1;
  unsigned char bit2:1;
};

struct SevenSegmentValue abc[3]={{1,0,1},{0,1,1},{1,1,0}};

int main(void)
{
    printf( "Memory size occupied by status1 : %d\n", sizeof(abc));
    printf( "Memory size occupied by status1 : %d\n", abc[2].bit0);
    printf( "Memory size occupied by status1 : %d\n", abc[2].bit1);
    printf( "Memory size occupied by status1 : %d\n", abc[2].bit2);
}

1 个答案:

答案 0 :(得分:2)

您无法创建位字段数组,因此无法遍历它们。

如果要打印unsigned char中的所有位,可以使用位移来访问每个位:

unsigned char c = 0x32;
int i;
for (i=0; i<8; i++) {
    printf("bit %d: %d\n", i, ((c >> i) & 1));
}

输出:

bit 0: 0
bit 1: 1
bit 2: 0
bit 3: 0
bit 4: 1
bit 5: 1
bit 6: 0
bit 7: 0

请注意,这首先打印最低有效位。如果你想要最重要的位,那么让循环计数向下而不是向上。