c++ - 什么时候以及为什么要在代码中使用位域?

标签 c++ c bit-manipulation bit-fields

<分区>

Possible Duplicate:
When is it worthwhile to use bit fields?

我最近在查找按位运算符时偶然发现了 bitfield 的概念.它看起来很有趣并且是一个非常酷的概念,但是人们什么时候和/或为什么会在他们的代码中使用它?

我知道它在嵌入式系统编程中用得相当多,但为什么呢(我似乎找不到任何关于它为什么有用的信息)?它有什么优点吗?位域在哪些其他地方有用?

最佳答案

通常,当您不关心速度和内存布局时,使用位域。如果您关心这些事情,请不要使用位域。

如果您有一组 bool 标志,则可以使用位域将它们打包(减少存储所需的大小)。但是,只能使用位域来访问位域。

这是经典的大小与速度问题。

另外一个注意事项是,如果您有一组小于 native 字的位域,那么您的编译器可能会尝试填充和对齐位域结构。所以你必须结束#pragma pack'ing 结构或至少使用一个本地词。因此,如果您在 32 位机器上,并且碰巧有 32 个仅在内部使用的 bool 标志,那么这将是位域的一个很好的用途。

关于c++ - 什么时候以及为什么要在代码中使用位域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12593396/

相关文章:

assembly - 在 Motorola 68000 Assembly 中如何将奇数变成偶数,反之亦然?

c - C语言中如何对某些数据进行按位运算?

c++ - gdb 显示类成员的乱码值,尽管代码有效

c++ - 嵌套命名空间如何工作?

c++ - C/C++ 链表永远不为空

C struct 仅在存在带有声明性方法的 printf 时才起作用

c - 使用按位运算符的 Mandelbrot 函数

c++ - Tensorflow C++ 快速张量深拷贝

c++ - 试图重载 << 运算符,但出现错误

c++ - 使用动态链接库管理堆