社区
C语言
帖子详情
这个小结构体里面是怎么定义的啊?
weiyiabout
2011-07-01 12:09:23
struct BLOCKINFO
{
byte id; // 方块 ID
char x, y; // 方块在游戏区中的坐标
byte dir:2; // 方向
}
byte dir:2;后面这个2是什么意思啊?
...全文
170
7
打赏
收藏
这个小结构体里面是怎么定义的啊?
struct BLOCKINFO { byte id;// 方块 ID char x, y;// 方块在游戏区中的坐标 byte dir:2;// 方向 } byte dir:2;后面这个2是什么意思啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
南气子水
2011-07-01
打赏
举报
回复
学习了
5t4rk
2011-07-01
打赏
举报
回复
位域问题
楼主慢慢看吧
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。
例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,
并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”
是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个
域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进
制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:
struct 位域结构名
{ 位域列表 };
其中位域列表的形式为: 类型说明符 位域名:位域长度
例如:
struct bs
...{
int a:8;
int b:2;
int c:6;
};
位域变量的说明与结构变量说明的方式相同。 可采用先定义后说明,同时定义说明或者
直接说明这三种方式。例如:
struct bs
...{
int a:8;
int b:2;
int c:6;
}data;
说明data为bs变量,共占两个字节。其中位域a占8位,位域b占2位,位域c占6位。
(上面的说法好像不太对,我们假设sizeof(int) == 4,那么 sizeof(data) 的值应该是4,
也就是说结构体 data 占用了一个 int 所占用的空间。
如图所示:
xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
---- ---- (data.a 所占的空间 8 bits)
-- (data.b 所占的空间 2bits)
---- -- (data.c 所占的空间 6bits)
可以看到 a, b, c一共占用了低16位的空间。)
对于位域的定义尚有以下几点说明:
1. 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不
够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。
例如:
struct bs
...{
unsigned a:4
unsigned :0 /**//*空域*/
unsigned b:4 /**//*从下一单元开始存放*/
unsigned c:4
}
在这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用
4位,c占用4位。
(我觉得这里不应该是以字节为单位,应该是以定义的类型为单位,如上例中,
就应该以 unsigned 为一个单位,b 从第二个unsigned 开始。
个人觉得,对于空域,不用去管里头到底是 0 还是1,意义不大,因为你访问不到他。
)
2. 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也
就是说不能超过8位二进位。
(按照以上的理解,就说明位域的长度不能够超过所定义类型的长度,
例如 定义: int a:36就是不允许的)
3. 位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使
用的。
luciferisnotsatan
2011-07-01
打赏
举报
回复
byte dir:2; 就是说这个dir大小为 2 bit
luciferisnotsatan
2011-07-01
打赏
举报
回复
google 位域
至善者善之敌
2011-07-01
打赏
举报
回复
位域的意思,一般和硬件打交道的用的较多
wuyu637
2011-07-01
打赏
举报
回复
http://yangwei.blogbus.com/logs/1550489.html
pathuang68
2011-07-01
打赏
举报
回复
[Quote=引用 4 楼 luciferisnotsatan 的回复:]
byte dir:2; 就是说这个dir大小为 2 bit
[/Quote]
++
楼主不妨花半个小时看一下位域是怎么回事,很简单的。
结构体
及
结构体
数组的
定义
本文详细介绍了
结构体
的六种
定义
方式,包括直接
定义
、使用typedef关键字、
定义
结构体
数组等,并通过学生基本信息的例子,清晰地展示了每种
定义
方式的特点和使用场景。
结构体
定义
的几种形式
本文详细介绍了五种不同的
结构体
定义
方法及其使用场景。包括最常用的
结构体
定义
方式、使用typedef为
结构体
设置别名等技巧。
typedef关键字与
结构体
、
结构体
指针的
定义
本文介绍了如何使用typedef简化
结构体
的
定义
及
结构体
指针的声明。通过具体示例展示了typedef在
结构体
定义
中的应用技巧,包括
定义
结构体
类型、为
结构体
起别名以及
定义
结构体
指针的方法。
结构体
变量和
结构体
类型的
定义
本文深入解析
结构体
的
定义
方式、类型变量
定义
、透明表区、数据元素、域及内部表属性等内容,涵盖C/C++与ABAP语言中
结构体
的详细说明,包括
结构体
在函数中的封装作用及内存对齐规则。
结构体
struct的
定义
和使用
本文详细阐述了C和C++中
结构体
的五种
定义
方式,包括普通形式、
定义
变量、匿名
结构体
、typedef
结构体
别名以及typedef匿名
结构体
。通过实例展示了在C和C++中如何使用这些
定义
方式,包括
结构体
变量的初始化和访问。同时提供了相关代码示例,便于理解和实践。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章