【发布时间】:2018-06-12 23:34:12
【问题描述】:
我试图检查关于 C++ 的 QA 练习,但一个问题让我发疯了!!
typedef struct {
unsigned int i : 1;
} myStruct;
int main()
{
myStruct s;
s.i = 1;
s.i++;
cout << s.i;
return 0;
}
问题说输出是什么:0/1/2/3/-1/Seg Error?
我确实检查了 2 这是一个错误答案 :D ,那么为什么程序显示 0 ?
【问题讨论】:
-
它是一个 1 位整数。如果你增加 1,它会回到 0。
-
unsigned int i : 1;是一个长度为 1 位的位域。有效值为 0 和 1。如果将其设置为 1,然后将其递增,您会得到什么? -
谨慎对待提供“Seg 错误”等答案的问题。如果你总是在你认为会得到的地方得到这些,那么调试会容易得多。
-
是的。通常情况下,您会将多个位打包到 unsigned int 的 32 位中。例如:
struct myStruct{ unsigned int i : 1; unsigned int j : 3; };会在相同的 32 位中为您提供结构的两个成员。一个需要 1 位,另一个需要 3。顺便说一句:您不需要 C++ 中的typedef。 -
等一下。我可能误解了你。如果
sizeof(unsigned int)为4,那么sizeof(myStruct)也将为4。其他31 位未使用。如果您移植到int为 64 位的环境,那么您将有 63 位未使用。这些 32 位或 64 位可以按您喜欢的方式细分。
标签: c++ struct bit-fields