如何在C编程语言中以位为单位定义固定大小的数据类型

时间:2016-06-02 13:16:36

标签: c

假设对于n = 4,我们需要定义数据类型A,使得A的大小变为 4位。我知道我们可以通过使用结构来做这件事 喜欢通过以下代码

struct Bit
{
    unsigned int a:4;
} dat;

这里dat将存储最大大小为4位的整数,即存储从0到15,但如果我们使用sizeof运算符,

sizeof(dat);

这将给出4(以gcc为单位)的值,它对应于4个字节,即32位,但我需要一些方法来定义大小为4位的数据变量。

3 个答案:

答案 0 :(得分:3)

在他的C标准和目前的主流电脑你不能。在所有常用的硬件上,字大小,CPU可以处理的“本机”数据大小是8位或多个(16,32,64)。从历史上看,计算机也使用其他字大小(如9或12),我不知道每个字的位数少于8位的现代机器。

当前C标准描述的最小整数类型是具有8位的(u)int8_t。

为例
struct Bit
{
    unsigned int a:4;
} dat;

标准中不要求最小或最大尺寸。但是CPU需要要求。对于他来说,它必须是8的倍数。

现在,如果我们在做什么

struct Bit
{
    unsigned int a:4;
    unsigned int b:4;
} dat;

编译器可能会将那些字段放入相同的8位区域并在所有操作上添加所需的移位,但这不是严格要求的。编译器也可以将它分成两个不同的单词。

无法访问不到一个单词。

答案 1 :(得分:-3)

这取决于架构。大多数处理器无法访问小于字节的内存,在您的情况下,32位可能是最小的内存块。

答案 2 :(得分:-3)

此处的大小为32位,因为您似乎使用32位机器,并且在每个周期中,读取32位(附加的28位是OS添加的填充位)。