【问题标题】:Typedef a bitfield variabletypedef 位域变量
【发布时间】:2013-01-26 12:03:00
【问题描述】:

我想要一个 1 位整数的 typedef,所以我想到了这个 typedef int:1 FLAG;,但我遇到了错误,有什么办法可以做到吗? 谢谢

【问题讨论】:

  • 我会使用 bool,但如果我想将其中一些组合成一个 8 位数字,我能做到吗?就像这些变量将是 0 或 1 一样,稍后在某个阶段,我想将一些变量组合成 10110,我使用 shift 来执行此操作,它适用于布尔值吗?

标签: c typedef bit-fields


【解决方案1】:

没有。

C 程序中最小的可寻址“事物”是 bytechar
char 至少有 8 位长。
所以你不能拥有少于 8 位的类型(或任何类型的对象)。

你可以做的是有一个类型,它的对象占用至少与char一样多的位并忽略大部分位

#include <limits.h>
#include <stdio.h>

struct OneBit {
    unsigned int value:1;
};
typedef struct OneBit onebit;

int main(void) {
    onebit x;
    x.value = 1;
    x.value++;
    printf("1 incremented is %u\n", x.value);
    printf("each object of type 'onebit' needs %d bytes (%d bits)\n",
          (int)sizeof x, CHAR_BIT * (int)sizeof x);
    return 0;
}

您可以在ideone 看到上面运行的代码。

【讨论】:

  • 这是唯一的一个。结构定义将带来所需的填充,您将能够使用您的对象,就好像它是 1 位长一样。当然,这个例子就像使用核弹杀死一个小虫子,但你会得到更有用的位域结构的想法。 (并且您的对象仍将在内存中占用 1 个字节)
猜你喜欢
  • 2012-07-21
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
相关资源
最近更新 更多