在下面的代码中,我得到 A = -1 作为输出。我想,这是因为我溢出了 3 位的 A 成员。 在这方面我有两个问题:
- 编译器难道不应该为成员 A 考虑最后 3 位而忽略其余位吗?为什么值为负?
- 如果考虑了所有位,为什么我得到 B = 0 的值作为输出?
我原以为 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);
}
最佳答案
I was expecting A would be having a value of 7
好的。 7在二进制中是111。但是你有一个 signed 字符(显然,因为你告诉我们它的结果是 -1)。所以你需要做:
typedef struct
{
unsigned char A: 3;
unsigned char B: 3;
unsigned char C: 3;
}my_struct;
关于c - 为什么结构成员似乎有一个溢出值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46377934/