小技巧之位操作的一种编程方式

一般地,我们要确认某个字节a的某位是否为1,

byte ifbit1( byte a ){  // 第一位

    return a&0x01;

}


byte ifbit4( byte a ){  // 第4位

  return a&0x10;

}


而要确定的位是由变量p指定时,

byte ifbit( byte a, int p ){

    byte one = (0x01<<p);

    return a&one;

}

再看,如何给某个字节的位置数操作

byte setbit1( byte a ){

    return a|0x01;

}


byte clearbit1( byte a ){

  return a&0xFE;  // a&(0xFF-0x01)

}


同样的,看看由变量p指定的位时的情况:

byte setbit( byte a,int p){

  byte one = (0x01<<p);

   return a|one;

}


byte clearbit( byte a,int p ){

  byte one = (0x01<<p);

  return a&(0xFF-one);

}


虽然这些操作非常简单, 但是写成函数,确实非常方便地对位操作进行了封装,还是很有必要的, 尤其是对32位或者64位操作时, 很容易少写或者多写一个0之类的.

还有一种不使用函数的方法,就是定义好位的常量, 直接调用常量来操作.不仅可以增加执行效率,还可以减少函数调用产生的栈操作.


static const byte sbit8[8]  = { 0x01, 0x02,0x04,0x08,0x10,0x20,0x40,0x80 };

static const byte cbit8[8] = { 0xFE, 0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F };


a&sbit8[p];  // 查看p位是否为0


a|sbit8[p];   // 置位

a&cbit8[p]  // 清除位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值