假设n = 4,我们需要定义一个数据类型A,使得A的大小变为4位。我知道我们可以通过使用结构来做到这一点 就像下面的代码一样
struct Bit
{
unsigned int a:4;
} dat;
这里 dat 将存储最大大小为 4 位的整数,即存储从 0 到 15,但如果我们使用 sizeof 运算符,
sizeof(dat);
这将为 4(在 gcc 中)赋予值,它对应于 4 个字节,即 32 位,但我需要某种方法来定义 dat 变量的大小为 4 位。
最佳答案
在 C 标准和当前主流计算机中,您不能这样做。在所有常用硬件上,字大小(CPU 可以处理的“ native ”数据大小)是 8 位或其中的多个位(16、32、64)。历史上计算机也使用其他字大小(如 9 或 12),但我不知道有哪台现代机器每个字的位数少于 8 位。
当前 C 标准描述的最小整数类型是 8 位的 (u)int8_t。
以你的例子
struct Bit
{
unsigned int a:4;
} dat;
标准中没有对此最小或最大尺寸的要求。然而,CPU 需要一些要求。对于一个 uint 来说,它得到的值必须是 8 的倍数。
现在如果我们在做什么
struct Bit
{
unsigned int a:4;
unsigned int b:4;
} dat;
编译器可能会将这些字段放入相同的 8 位区域中,并在所有操作上添加所需的移位,但这不是严格要求的。编译器也可以将其放入两个不同的单词中。
无法访问少于一个单词的内容。
关于c - 如何在 C 编程语言中定义固定大小的数据类型(以位为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37593015/