[英]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;
}
为了更好地参考我的要求,这里编号:
[80]
和[20]
在这里是什么意思?text[80]
是否表示包含 80 个此类结构的数组?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.