为什么c位字段中的unsigned int值变为有符号值?

时间:2014-02-07 06:33:29

标签: c++ bit-fields

#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?

2 个答案:

答案 0 :(得分:3)

int默认为已签名,因此int :2的范围为-2到1.如果您希望能够存储值0到3,请使用unsigned int :2。< / p>

答案 1 :(得分:2)

第一个是符号位。 对于2(10),第一个是符号1,所以它的负数。 2的赞美你将获得-2。