为什么结构成员似乎有溢出值?

时间:2017-09-23 09:09:04

标签: c struct structure padding bit

在下面的代码中,我得到A = -1作为输出。我想,这是因为我溢出了3位的A成员。 我在这方面有两个问题:

  1. 对于成员A,编译器是否应该考虑最后3位并忽略其余部分?为什么价值为负?
  2. 如果考虑所有位,为什么我得到B = 0的值作为输出?
  3. 我期待A的值为7,但我显然误解了一些东西。请帮忙。

    #include  <stdio.h>
    typedef struct
    {
      char A: 3;
      char B: 3;
      char C: 3;
    }my_struct;
    my_struct new_object = {0};
    
    void main(void)
    {
      new_object. A = 63;
      printf("A = %d\n", new_object.A);
      printf("B = %d\n", new_object.B);
    }
    

1 个答案:

答案 0 :(得分:3)

  

我期待A的值为7

行。 7是二进制的111。但是你有一个签名的字符(显然,因为你告诉我们它出现了-1)。所以你需要这样做:

typedef struct
{
  unsigned char A: 3;
  unsigned char B: 3;
  unsigned char C: 3;
}my_struct;