1 测试指定的位
unsigned char BitTst(unsigned char *Pa,char b) //Pa为被测试的对象的地址,b值为指定的位
{
return *Pa & (1<}
用法:
unsigned char x,y;
y=0x4F;
x=BitTst(&y,3);
2 将指定的位置“1”
void BitSet(unsigned char *Pa,char b) //Pa为置位对象的地址,b值为指定的位
{
*Pa|=1<}
用法:BitSet(&x,6);
3 将指定的位清“0”
void BitClr(unsigned char *Pa,char b) //Pa为清零位对象的地址,b值为指定的位
{
*Pa&=~(1<}
用法:BitClr(&x,6);
4 将指定的位取反
void BitCpl(unsigned char *Pa,char b) //Pa为取反位对象的地址,b值为指定的位
{
*Pa^=1<}
用法:BitCpl(&x,6);
写成宏的方式吧,速度快点!
#define BitSet(a,b) (a |= (1<#define BitClr(a,b) (a &= ~(1<
写成宏的话会快很多。
宏是直接编译的。
而函数需要跳转语句,还要保护现场,花费很大。
用函数实现的同样功能的位操作源程序
#define BitTst(a,b) a & (1<void main(void)
{
void SetBit(char *Pa,char b);
char a=0,b,c=5,d=3;
SetBit(&a,c);
b=BitTst(a,c);
SetBit(&a,d);
b=BitTst(a,c);
while(1)
;
}
void SetBit(char *Pa,char b)
{
*Pa|=1<}
阅读(585) | 评论(0) | 转发(0) |