C++ - 如何使用位域

问题描述 投票:0回答:1

所以我最近遇到了这样的事情

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.

感谢您的帮助

c++ bit-fields
1个回答
25
投票

位域只能在结构化数据类型中使用,即

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;
    ...
};
© www.soinside.com 2019 - 2024. All rights reserved.