所以我最近遇到过这样的事情
unsigned char ch : 7;
在struct中。我读了一下。显然这些被称为位域。它们用于设置char可以接收的数据宽度。 但是我们如何使用这些东西。例如,我知道我们可以将变量ch设置为一个字节
unsigned char ch = 0x61;
cout << ch << endl;
这将输出
a
但是,我们如何处理位域?
unsigned char ch : 7;
ch = 0x61; //This doesn't work for some reason
unsigned char ch : 7;
unsigned char ch = 0x61/ //Neither does this.
感谢您的帮助
答案 0 :(得分:3)
位域只能在结构化数据类型中使用,即struct
,class
和union
类型。目的是允许您在单个字节内打包多个成员,而无需编写大量显式移位和掩码。例如,您可以写:
struct halfbyte_t {
unsigned int half1: 4;
unsigned int half2: 4;
} halfbyte;
这声明了一个名为halfbyte
的变量,它包含两个4位成员,它们将打包成一个8位字节,而不是必须使用2个字节,如果你刚刚声明它们unsigned char
您可以像访问任何其他结构成员一样访问它们:
halfbyte.half1 = 3;
cout << halfbyte.half3;
如果结构中有许多布尔标志,则1位字段特别有用,因为每个标志都不必有单独的字节。
struct flag_t {
unsigned int flag1: 1;
unsigned int flag2: 1;
unsigned int flag3: 1;
unsigned int flag4: 1;
...
};