可能重复: ‘未签名的temp:3’是什么意思?
我在阅读Clang的代码时遇到了一个问题。
class LangOptions {
public:
unsigned Trigraphs : 1; // Trigraphs in source files.
unsigned BCPLComment : 1; // BCPL-style '//' comments.
...
};这是我第一次看到语法“:1",”:1“代表什么?谢谢!
发布于 2011-06-10 13:34:39
它是一个位域,这意味着该值将只使用一位,而不是32位(或者平台上的任何sizeof(unsigned) * <bits-per-byte> )。
Bitfield对于编写紧凑的二进制数据结构很有用,尽管它们带来了一些性能代价,因为编译器/CPU不能更新一位,但是在读取/写入整个字节时需要执行和/或操作。
发布于 2011-06-10 13:34:19
Trigraphs和BCPLComment只使用1位来保存值。
例如,
struct S
{
signed char type : 2;
signed char num : 4;
signed char temp : 2;
};只使用8位内存。struct S可以使用单个字节或内存。对于某些实现,sizeof(S)是1。但type和temp等于0,1,2或3,而num仅等于0,1,2,.
发布于 2011-06-10 13:34:34
这些都是位字段。"1“是以位表示的宽度。
有关解释,请参见C常见问题。
https://stackoverflow.com/questions/6307070
复制相似问题