一个关于位段的问题?

nxf1125 2008-01-03 07:13:29
关于位段我一直都有几个问题哪位高手可以帮忙解释下:
1:位段成员不是只有int,unsigned int两种类型吗?为什么我在有的程序里面看到
unsigned short型和unsigned char型.如:unsigned char mode:1;用的还挺正常,为什么?

2:位段成员的空间问题,比如:
typedef struct
{
unsigned int mode: 5;
unsigned int brightness:9;
unsigned int contrast: 15;
unsigned int color: 5;
}color_adjust_t;
有书上说:当一个字节未占满,而当前字节中剩下的空间又不够下一个位段成员
则会从下一个字节开始存放下一个位段成员.按照他的意思,位段的空间开辟是
以字节为单位的.那么上面的空间应该是6个字节.但是我在VC上实验却是8
个字节.是不是他是以四个字节为单位开辟空间的?即当前四个字节空间不够用
才再开辟4个字节的空间?还是开辟多大的空间跟位段的类型有关?

3:有的书上说位段的长度要不要超过8位跟编译器有关,可我一直都见过超过8位的位段,如上.用的不挺好?
...全文
134 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nxf1125 2008-01-04
  • 打赏
  • 举报
回复
谢谢所有回答我问题的高手,在你们的回答和自己的实验我找到了自己想要的答案.
分数不多.我已经山穷水尽了.希望不要介意...
asmst 2008-01-03
  • 打赏
  • 举报
回复
提供三点信息:
1.位段的宽度不得超过类型宽度
比如unsigned char mode:9 是不行的,因为char只有8位。
2.位段的类型可以是基本的整数类型如char,short,int,long,可以是signed也可以是unsigned
3.位段怎么具体占据空间,还是和编译器自己的实现有关,但不管怎么说,肯定和位段类型是有关的
nxf1125 2008-01-03
  • 打赏
  • 举报
回复

有书上说:当一个字节未占满,而当前字节中剩下的空间又不够下一个位段成员
则会从下一个字节开始存放下一个位段成员.
-------------这句话是不是有问题???要不下面这个结构的空间怎么是4个字节?
typedef struct
{
unsigned int mode: 6;//第一个字节的空间已经不够存放brightness
unsigned int brightness:13;
unsigned int contrast: 13;
}color_adjust_t;
nxf1125 2008-01-03
  • 打赏
  • 举报
回复
位段成员不是只有int,unsigned int两种类型吗?
-----我在潭浩强的书上看的.
lj860603 2008-01-03
  • 打赏
  • 举报
回复
2.VC的字节对齐问题,默认是8位对齐的,所以在VC上是显示8个字节。

关于对齐的问题,论坛上已经有不少,不懂GOOGLE一下。

3。我刚想了想,实在不大清楚为什么书那样说,呵呵,就不说了。
Treazy 2008-01-03
  • 打赏
  • 举报
回复
>>位段成员不是只有int,unsigned int两种类型吗?

这个我是第一次看到!
谁说的?是楼主自己说的吧!
lj860603 2008-01-03
  • 打赏
  • 举报
回复
1.:位段成员不是只有int,unsigned int两种类型吗?
=============================
谁说的?应该是你理解错了。是要指明是signed还是unsigned类型,因为为了移植的方便。
字段的属性跟具体实现有关,也就是跟环境有关了。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧