位域在哪些情况下有用?
问问题
253 次
2 回答
1
在任何情况下,您都有多个要存储的布尔值并且您不想浪费内存。
例如,一个 32 位整数有 32 位。因此,您可以使用它来使用位字段存储 32 位布尔值。任何其他数据结构至少会使用 32 个字节。
于 2012-12-01T03:53:47.080 回答
1
罗迪的回答在这里有一个很好的解释
- 位域使用起来更简洁(以/稍微/更冗长的编写为代价。
- 位域更健壮(无论如何,“int”的大小是多少)
- 位域通常与按位运算符一样快。
- 当您混合使用单个位域和多个位域时,位域非常强大,并且提取多位域涉及大量手动移位。
- 位域有效地自我记录。通过定义结构并因此命名元素,我知道它意味着什么。
- 位域还可以无缝处理大于单个 int 的结构。
对于按位运算符,典型的(不好的)做法是为位掩码使用大量#defines。
位域的唯一警告是确保编译器确实将对象打包成您想要的大小。我不记得这是否由标准定义,因此 assert(sizeof(myStruct) == N) 是一个有用的检查。
还要经历什么时候值得使用位域?,其中有一些很好的例子。
于 2012-12-01T07:31:35.277 回答