社区
C语言
帖子详情
这个小结构体里面是怎么定义的啊?
weiyiabout
2011-07-01 12:09:23
struct BLOCKINFO
{
byte id; // 方块 ID
char x, y; // 方块在游戏区中的坐标
byte dir:2; // 方向
}
byte dir:2;后面这个2是什么意思啊?
...全文
121
7
打赏
收藏
这个小结构体里面是怎么定义的啊?
struct BLOCKINFO { byte id;// 方块 ID char x, y;// 方块在游戏区中的坐标 byte dir:2;// 方向 } byte dir:2;后面这个2是什么意思啊?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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]
++
楼主不妨花半个小时看一下位域是怎么回事,很简单的。
C语言-
结构体
是什么?
结构体
怎么用?
2.1
定义
结构体
2.2
定义
结构体
变量2.3
结构体
成员引用2.5
结构体
成员赋值2.6
结构体
赋值2.7
结构体
整体初始化2.8
结构体
部分初始化3. 其他语法3.1
定义
结构体
并同时
定义
结构体
变量3.2
定义
结构体
并同时
定义
结构体
变量...
c语言
结构体
定义
类型数据类型,
结构体
类型是什么?如何
定义
?
C语言中
结构体
类型是由不同的类型的数据组成的,组成
结构体
类型的每一个数据都称为该
结构体
类型的成员。在程序设计中,使用
结构体
时,首先要对
结构体
类型的组成进行描述,
结构体
的
定义
方式如下:struct
结构体
类型...
结构体
及
结构体
数组的
定义
1.
结构体
结构体
是用户自
定义
的可用的数据类型,它允许您存储不同类型的数据项。 2.
结构体
的
定义
以学生的基本信息为例,包括四个变量...(2)
定义
了一个
结构体
STU的同时
定义
了两个
结构体
STU的变量stu2,stu3。 struct
宏
定义
放在 一个
结构体
中 合适吗?
结构体
:
结构体
是一种用户自
定义
的数据类型,用于将不同类型的数据组合在一起,形成一个新的数据单元。作用域混淆:宏
定义
的作用域是文件范围,而
结构体
成员的作用域是
结构体
内部。将宏
定义
放在
结构体
中会导致作用域...
C语言
定义
了一个
结构体
怎么分配内存?C\C++中
结构体
变量与
结构体
指针内存分配问题?
C语言
定义
了一个
结构体
怎么分配内存?C\C++中
结构体
变量与
结构体
指针内存分配问题? 问题1:
结构体
指针最开始怎么分配内存?用sizeof()是不能确定大小的。 问题2:给
结构体
变量分配之后,是否还要给每个成员分配,...
C语言
70,024
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章