假设对于n = 4,我们需要定义数据类型A,使得A的大小变为 4位。我知道我们可以通过使用结构来做这件事 喜欢通过以下代码
struct Bit
{
unsigned int a:4;
} dat;
这里dat将存储最大大小为4位的整数,即存储从0到15,但如果我们使用sizeof运算符,
sizeof(dat);
这将给出4(以gcc为单位)的值,它对应于4个字节,即32位,但我需要一些方法来定义大小为4位的数据变量。
答案 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添加的填充位)。