【发布时间】:2013-10-02 15:41:05
【问题描述】:
好吧,我已经创建了一个位字段
typedef struct
{
unsigned bit : 1;
}BIT;
并且 sizeof 运算符返回 4...ergo 说 struct 并不是真的有点,而是 32。有没有办法强制 c 结构低于所述值?这一切都依赖于系统吗? (我的书说一个 char 只有 1 个字节,而对我来说 sizeof(char) 返回 4...)
【问题讨论】:
-
我怀疑你的 'sizeof(char)' 返回 4。
-
可能你有
sizeof('a')或返回4。C 中的字符常量不是char类型,而是int类型。 -
@hacks,不,不,不。
sizeof被定义返回对象中char的数量,因此sizeof(char)始终为1。如果你的编译器告诉你一些不同的东西,它肯定不是C 编译器。 -
@hacks:根据定义,类型
char的大小为1;宏CHAR_BITS告诉您单个char中有多少位(至少 8 个,但可能更多)。char值是否映射到目标平台上的单个字节取决于实现。例如,一种旧的体系结构(PDP?)使用 36 位字,它可以保存 5 个 7 位字符值,剩下一位。将char值映射到该架构将是一项挑战。 -
@hacks 在 C 中,“字节”不一定是 8 位,而是“数据存储的可寻址单元,大到足以容纳执行环境的基本字符集的任何成员”。它也必须 >= 8 位。 IWO,
char。所以char的大小始终为 1。在此 C 语言定义之外,“字节”现在在很大程度上被理解为 8 位(并非总是如此)。所以char可能是 2 个“C 定义之外”字节。