在下面的代码中,我得到A = -1作为输出。我想,这是因为我正在溢出3位的A成员。 我在这方面有两个问题:为什么结构成员似乎有溢出价值?
- 不应该编译器考虑最后3位,并忽略其余成员A?为什么价值是负面的?
- 如果考虑所有位,为什么我会得到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);
}
是不是将63分配给一个未定义的行为?所以结果可能是任何事情。 –
@CostantinoGrana:不,它不是。它不是'char c = 0xffff;'不是。感谢C的隐式转换。 – alk
@alk:感谢您提供的信息。我不知道位域是否包含在整数转换中。 –