给定一个复杂的数据结构,其中每个子结构都有一个域为{true or false}的变量,
(例如)
struct dataBlock{
struct {
/* more members */
char status;
} node1;
struct {
/* more members */
char status;
} node2;
/* More nodes */
};
1个字节只为1或0的值是一种浪费。有没有C语言的技术,每个节点中的状态只占一个字节中的一个位?我能想到的是使用 MACROS 但宏不能包含在本地范围内,对吧?所以拥有宏状态将意味着程序中只有一个宏状态。因此,调用 node1.status 和 node2.status 使用相同的宏。
最佳答案
您可以使用位域 - 这种语法允许您定义 strcut 中的每个 int 应占用多少位。 但是请注意,C 只能分配完整的字节,因此在任何情况下结构的大小都将四舍五入为最接近的 8 位乘法。
例如:
struct {
int whole_int; /* a whole int, let's assume it's 16 bits. */
int half_int : 8; /* only half an int */
int another_half_int : 8;
} some_struct /* Total size is 2 bytes*/
话虽如此,我真诚地怀疑您是否会注意到使用此技术带来的任何性能提升,而且正如 Fredrick Gauss 评论的那样,这可能不值得麻烦。
关于c - 有没有一个字节可以占位的C语言技巧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20866784/