C++中有没有能保存位值的变量?

来源:百度知道 编辑:UC知道 时间:2024/06/20 18:55:25
C++中有没有能保存位值的变量?
谢谢 湛蓝水晶 的回答 我试了下 发现sizeof(flag)永远是4字节,不管里面加了多少字段,那是不是只可以声明4字节的呢?是因为我的机器是32位的关系吗?

我的意思是能不能减小保存字段的字节数 比如用2个字节?就是说对齐2字节

用结构体位字段,例如:
struct
{
//冒号后的数字表示字段的宽度,如1表示1位
//变量必须声明成unsigned int
unsigned int key : 1;
unsigned int ex : 1;
unsigned int stat : 1;
} flag;

上面的struct声明了三个位(key、ex和stat),使用的时候可以直接应用:
flag.key = 1; //置位
flag.ex = 0; //复位

你说的sizeof的问题,是因为要对齐,因为一个位至少要占用1个整型(反之,一个整型最多保存32位)。所以,当你的字段个数在1--32之间时,sizeof就是4,而当字段为33--64时,就占用2个整形,sizeof就是8,以此类推。
如果你想减成2字节,类型就不要用unsigned int,改用unsigned short

mnk[;jpkl;g[d;gds'f]sd\'f
x'c
d;g[;h[g;hpt;ht;h[t