struct bitfield max size(C99,C++)

osg*_*sgx 13 c c++ struct c99 bit-fields

位结构字段的最大位宽是多少?

struct i { long long i:127;}
Run Code Online (Sandbox Code Playgroud)

我可以在struct中定义一个位字段,位域大小最多为128位,或256位,或更大?有一些超宽的矢量类型,如sse2(128位),avx1/avx2(256位),avx-512(512位用于下一个Xeon Phis)寄存器; 以及gcc中的__int128等扩展名.

Ste*_*non 20

C99§6.7.2.1,第3段:

指定位字段宽度的表达式应为整数常量表达式,其具有非负值,如果省略冒号和表达式,则该非负值不得超过指定类型的对象中的位数.如果该值为零,则声明不应具有声明者.

C++0xa§9.6,第1段:

... constant-expression应为具有大于或等于零的值的整数常量表达式.积分常数表达式的值可能大于位域类型的对象表示(3.9)中的位数; 在这种情况下,额外的比特用作填充比特,并且不参与比特字段的值表示(3.9).

所以在C中你完全不能这样做,而在C++中它不会做你想要的.

  • 你只是忘了提到在C99中唯一可以保证工作的类型是`_Bool`,`signed int`和`unsigned int`.特别是OP对"long long"的使用是特定于实现的. (4认同)