#include <iostream>
#include <stdint.h>
struct Foo
{
int a : 2;
int b : 2;
int c : 2;
int d : 2;
};
int main()
{
Foo foo;
foo.d = 2;
std::cout << sizeof(foo) << std::endl;
std::cout << foo.d << std::endl;
return 0;
}
使用g ++,结果变为4 -2
,foo.d怎么会变成-2?
答案 0 :(得分:3)
int
默认为已签名,因此int :2
的范围为-2到1.如果您希望能够存储值0到3,请使用unsigned int :2
。< / p>
答案 1 :(得分:2)
第一个是符号位。 对于2(10),第一个是符号1,所以它的负数。 2的赞美你将获得-2。