【问题标题】:How do I create a 3 bit variable as datatype in C? [duplicate]如何在 C 中创建一个 3 位变量作为数据类型? [复制]
【发布时间】:2015-09-29 03:02:00
【问题描述】:

我可以 typedef charCHAR1 这是 8 位。 但是如何将 3 位变量作为数据类型?

【问题讨论】:

  • 为什么是三位例程?计算机更喜欢字节
  • 听起来像X-Y problem。你到底想达到什么目的?
  • 您不需要使用所有八位。
  • 旁注:char 并不总是 8 位。
  • @Ishmeet:stackoverflow.com/questions/881894/… 已经有一个 SO 问题@

标签: c


【解决方案1】:

您可能想要执行类似于以下的操作:

struct
{
  .
  .
  .
  unsigned int fieldof3bits : 3;
  .
  .
  .
} newdatatypename;

在这种情况下,fieldof3bits 在结构中占用 3 位(根据您定义其他所有内容的方式,结构的大小可能会有所不同)。

这种用法称为bit field

来自维基百科:

位域是计算机编程中用于存储多个逻辑相邻位的术语,其中可以寻址每个位组和单个位。位域最常用于表示已知的固定位宽的整数类型。

【讨论】:

  • 它也是 C 语言中最晦涩难懂的核心语言特性之一,所以当你真的离不开它时最好使用它。
  • 对于某些协议等(需要特定大小的字段),可能是我能想到的唯一正确用途。
【解决方案2】:

看来您要的是位域https://en.wikipedia.org/wiki/Bit_field 请注意,在某些情况下,使用 char 或 unsigned char 而不是位(特定于编译器、物理内存布局等)会更安全

编码愉快!

【讨论】:

    【解决方案3】:
    typedef struct {
    
    int a:3;
    }hello; 
    

    只有当它在结构内部时才有可能,否则它不是

    【讨论】:

    • 这不是结构语法..你错过了结构名称和分号。
    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多