繁体   English   中英

如何阅读 C++ 位域定义的语法?

[英]How to read the syntax of a C++ Bitfield definition?

我需要一些帮助来理解位域定义的语法。 我阅读了上面的 Microsoft 文档页面,但那里的示例仍然给我留下了疑问。 给定一个 Bitfield 和 main 方法,如下所示:

struct {
    unsigned short character : 8;
    unsigned short color     : 4;
} text[80];

int main() {
    text[20].character = 'a';
    text[20].color = 5;
}

为了更好地参考我的要求,这里编号:

  1. [80][20]在这里是什么意思?
  2. text[80]是否表示包含 80 个此类结构的数组?
  3. text[20].character = 'a'意味着在数组的位置 20 处有一个字符'a'

“这里的[80][20]是什么意思?”

text[80]; 声明一个包含 80 个元素的数组, text[20]访问第 21 个元素。

text[80]是否表示包含 80 个这样的结构的数组?

是的。

text[20].character = 'a'意味着,在数组的第 20 位有一个字符 'a'?”

是的。

[80] 和 [20] 在这里是什么意思?

[80] 表示定义您定义的匿名类型的数组(定义的结构)。 让我清楚地说明正在发生的事情。 由于unsigned short是 16 位,因此该结构体将是一个 16 位内存,其中前 8 位命名为字符,中间 4 位命名为颜色,不使用 4 个结束位。

您从此结构创建了一个包含 80 个元素的数组。 这意味着您的内存中有 80 个连续的 16 位; 这些元素(16 位)中的每一个都有一个字符(8 位)和一个颜色(4 位)和 4 个未使用的位。

位域在低级软件和嵌入式系统中非常有用。 例如,在您的场景中,似乎消费者在等待数据,其前 8 位将被视为字符(ASCII),而其接下来的 4 位将被视为该字符的颜色。 所以你的 80 个元素数组意味着 80 个有自己颜色的字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM