读书人

结构体(类)成员位赋值有什么需要特殊

发布时间: 2012-03-31 13:13:26 作者: rapoo

结构体(类)成员位赋值,有什么需要特殊注意的吗?
问题是这样的(举例如下,sizeof(int) = 32):
class A
{
public:
A();
public:
int a:4;
int b:3;
int c:1;
int d:3;
int e:5;
int f:5;
int g:3;
int h:6;
int i:2;

...
...

};

A::A()
{
...//初始化;
}

//后面的某处,对这些成员赋值
A aTest;
aTest.a = 3;
aTest.b = 1;
aTest.c = 2;
aTest.d = 5;
....
....

结果我在使用这些成员的值的时候,发现有些值变成负数了,比如这里的aTest.d 当时赋值的时候是5,结果最后变成了-3.
按道理说5用3位足以存储,不知道是什么原因。

求指点,谢谢

[解决办法]
最高bit位按符号位处理了
如果你只存正数的话可以使用
问题是这样的(举例如下,sizeof(int) = 32):
class A
{
public:
A();
public:
unsigned int a:4;
unsigned int b:3;
unsigned int c:1;
unsigned int d:3;
unsigned int e:5;
unsigned int f:5;
unsigned int g:3;
unsigned int h:6;
unsigned int i:2;
.....

读书人网 >C++

热点推荐