keil中结构体变量能定义位变量吗?怎么定义?

 我来答
藏在水中的人
推荐于2017-09-04 · TA获得超过990个赞
知道小有建树答主
回答量:474
采纳率:0%
帮助的人:574万
展开全部
位结构是C51语言中的一种特殊结构,可以用于访问一个字节或字的多个位。位结构一般形式如下。
struct 位结构名
{
数据类型 变量名: 整形常数;
数据类型 变量名: 整形常数;
}位结构变量;
其中,struct为关键字,位结构数据类型必须是整型int(unsigned或signed);整形常熟必须是非负的整数,范围是0~15,用于表示有多少位,即表示二进制位的个数,变量名是可选项,可以省略。位结构的定义,实例如下。

struct
{
unsigned LBit : 8; //LBit 占用低字节0~7共八位。
unsigned HBit0 : 4; //HBit0 占用高字节0~3共4位。
unsigned HBit1 : 3; //HBit1 占用高字节4~6共3位。
unsigned HBit2 : 1; //HBit2 占用高字节第7位。
}Bit;
位结构成员的访问与结构成员的访问相同,例如访问上列位结构中的LBit成员可写成如下形式
Bit.LBit
在使用位结构时,应注意以下几点。
1、位结构中的成员必须是int,但可以定义为unsigned或者signed。
2、当位结构成员长度为1时,C51语言将其认为是unsigned类型。
3、位结构总长度(位数)是各个位成员定义的位数之和,可以超过两个字节。
4、位结构中的成员不能使用数组和指针,但位结构变量可以是数组和指针。如果是指针,其成员访问方式同结构指针。
5、位结构可以成为嵌套式结构的成员,与其他结构成员一起使用,示例如下。
struct student
{
char *name;
int num;
int age;
char *sex;
float score;
unsigned reister:1;
unsigned pay:1;
};
追问
你所说的是如何定义结构体变量,我问的是能否用它来定义位变量?如何定义?我要拿keil软件写程序,谢谢
追答
结构体中,不能像其它类型一样直接使用位变量,只能够通过位结构方式使用。
一剑出血
高粉答主

2012-02-24 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
Keil的结构体与标准C的结构体一样,想实现位变量只能通过位域(bit field),也就是楼上贴出来的那一大堆。
需要注意的是位域其实是通过对结构体变量反复进行按位运算取出的,执行效率上比较低下。如果你期望实现效率很高的位成员操作,对于51而言可以利用bdata,对于Cortex-M3核而言可以利用位绑定映射(bit-banding)。

“位结构是C51语言中的一种特殊结构,”
这句话比较搞笑。位域是标准C的内容,不是C51的独创。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mr_kimoji
2012-02-24 · 超过16用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:50万
展开全部
typdef struct{
int a;
char b;
}test;

test ABC
ABC.a=1;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式