Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1419051
  • 博文数量: 430
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4388
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-24 18:04
文章存档

2013年(1)

2008年(2)

2007年(14)

2006年(413)

分类:

2006-10-18 14:37:14

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<}

阅读(579) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~