如何在C语言中创建一个三位变量作为数据类型?

8

我可以将typedef char定义为8位的CHAR1。但是我如何使用3位变量作为数据类型?


2
为什么要使用三位例程?计算机更喜欢字节。 - Ed Heal
3
听起来像是一个X-Y问题。你到底想要实现什么? - Yu Hao
1
你不需要使用所有八位。 - Ed Heal
3
旁注:char 不一定总是8位。 - Quentin
1
@Ishmeet:这个问题已经有一个SO的提问了https://dev59.com/-HNA5IYBdhLWcg3wpfiu - Jay Bosamiya
显示剩余6条评论
3个回答

6
您可能想要做类似于以下内容的事情:
struct
{
  .
  .
  .
  unsigned int fieldof3bits : 3;
  .
  .
  .
} newdatatypename;

在这种情况下,fieldof3bits 在结构体中占用了 3 位(根据您定义的其他内容,结构体的大小可能会有所变化)。
这种用法被称为位域
来自维基百科:
位域是计算机编程中用于存储多个逻辑相邻位的术语,其中可以寻址每组位和单个位。位域最常用于表示已知的固定位宽度的整数类型。

1
这也是C语言最不为人知的核心特性之一,因此只有在确实无法避免时才最好使用它。 - Matteo Italia
在某些需要特定大小字段的协议等情况下,这可能是我能想到的唯一合适用途。 - Jay Bosamiya

1
typedef struct {

int a:3;
}hello; 

只有在结构内部才可能实现,否则不行。

这不是结构体语法...你错过了结构体名称和分号。 - Ishmeet

1
似乎您正在询问位域https://en.wikipedia.org/wiki/Bit_field。请注意,对于某些情况,只使用char或unsigned char可能更安全(编译器特定,物理内存布局等)。祝编码愉快!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接