2017-05-26 37 views
-4

这是一个测试问题的代码片段。问题是S的大小是多少。这个简短的C++代码是什么意思?

struct S 
{ 
    char a : 4; 
    unsigned char b : 3; 
    signed char : 2; 
    char c : 1; 
    char d : 5; 
}; 

“:”做什么?将它应用于有符号或无符号字符(或任何其他数据类型)时有任何区别吗?这通常用于何时?

+4

http://en.cppreference.com/w/cpp/language/bit_field –

+0

也值得一读https://stackoverflow.com/questions/44169863/what-does-char-3-in-a- struct-mean-and-how-large-is-the-member作为警告,提示这个问题有多丑。 – user4581301

+2

请注意,“多个相邻的位字段通常打包在一起(尽管此行为是实现定义的)”。答案是实现定义的。 –

回答

1

这是一个位字段,它表示例如char a将只有4位内存而不是普通的8.无符号字符b只有3位内存。位数限制了它可以容纳的值的范围。

位字段以位为单位声明一个具有显式大小的类数据成员。相邻的位字段成员可以打包以共享和跨越单个字节。 http://en.cppreference.com/w/cpp/language/bit_field