#include <iostream>
using namespace std;
int main()
{
struct A
{
unsigned int a:1;
unsigned int b:2;
int c:1;
int d:2;
}sa;
sa.a = 1;
sa.b = 3;
sa.c = 1;
sa.d = 3;
printf("%d, %d, %d, %d\n", sa.a, sa.b, sa.c, sa.d);
return 0;
}
输出:1, 3, -1, -1
A bit-field may have type int, unsigned int, or signed int. Whether the high-order bit position of a “plain” int bit-field is treated as a sign bit is implementation-defined. A bit-field is interpreted as an integral type consisting of the specified number of bits.
上面说的意思大概是一个bit类型表示的数也可以是有符号的,这个bit类型的最高位就是表示符号位。除了最高位表示符号剩下的字段表示一个数值。无符号的c,表示的范围是-1,0,无符号的d表示的范围是-2, -1, 0, 1,注意-0的表示。还有就是溢出的时候,b只有两位不能表示3,但是b的位设置和3的后两位表示是一样的,相当于对数据后半部分的截断。