位运算

按位与(a&b)

相同位的两个数字都为1,则为1;

若有一个不为1,则为0

按位或(a|b)

相同位只要一个为1即为1

按位异或(a^b)

相同位不同为1,相同位相同为0

按位取反(~a)


左移运算(a>>n)

左移运算左侧移出的位将舍弃,右边将补0

右移运算(a<<n)

右移运算较为复杂,除了移出的位将舍弃,若变量为无符号型,左侧将补0,若为有符号型,左侧将补1


应用1:奇偶校验求校验位

void parity_check(unsigned x)
{
  int val=0;
  while(x)
  {
    val^=x;//val 和x进行异或运算
    x>>=1;//x右移一位
  }
  return val&0x1;//取末位运算. val的二进制形式最后一位位1则返回1,为0则返回0.
}

逻辑:对数据自身进行异或运算,如0^1=1,说明有奇数个1,再将结果与下一位异或,若下一位为1,相当于(0^1)^1,结果为0,即进行比较的三位中有偶数个1,同理,若下一位为0,则结果为1,即进行比较的三位中有奇数个1。上述程序中将辅助变量初始化为0。该程序通过移位运算实现数据各位间的异或运算,实际上辅助变量只有最后一位被用到。

参考资料:位运算: 点击打开链接    奇偶校验: 点击打开链接     点击打开链接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值