低端单片机具有位寻址,故可见以位为单位的变量,比如C51中的sbit,及Keil编译器重载了^操作,可以通过类似ACC^1的方式访问ACC寄存器的1位。
较高端的单片机,一直到PC机,几乎没有位寻找功能,存在以位为单位的变量没任何意义。
处理位一般使用与或操作,比如uint8型变量test,如欲将第7位置位1,操作为test |= (1<<7);如欲将第5未置为0,操作为test &= ~(1<<5);
实际处理起来操作并不多,相对以前的位寻址只增加很少代码。
实际应用中,一般现在内存都很大,不必计较这点内存损失。如果内存紧张,则可将一组比特状态,保存在一个int型中,根据位进行判断,不过要牺牲性能。举例:
#define FLAG_1 0
#define FLAG_2 1
#define FLAG_3 2
#define FLAG_4 3
unsigned int flags = 0;
//置位FLAG_1
flags |= 1<
//置位FLAG_2
flags |= 1<
//清零FLAG_2
flags &= ~(1<
//判断FLAG_3
if(flags & (1<
{
//FLAG_3 置位状态
}
else
{
//FLAG_3 清零状态
}