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

如题所述

位结构是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软件写程序,谢谢

追答

结构体中,不能像其它类型一样直接使用位变量,只能够通过位结构方式使用。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-24
Keil的结构体与标准C的结构体一样,想实现位变量只能通过位域(bit field),也就是楼上贴出来的那一大堆。
需要注意的是位域其实是通过对结构体变量反复进行按位运算取出的,执行效率上比较低下。如果你期望实现效率很高的位成员操作,对于51而言可以利用bdata,对于Cortex-M3核而言可以利用位绑定映射(bit-banding)。

“位结构是C51语言中的一种特殊结构,”
这句话比较搞笑。位域是标准C的内容,不是C51的独创。
第2个回答  2012-02-24
typdef struct{
int a;
char b;
}test;

test ABC
ABC.a=1;