您当前的位置: 首页 > 

风间琉璃•

暂无认证

  • 2浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

常用位运算总结

风间琉璃• 发布时间:2022-01-17 13:01:21 ,浏览量:2

文章目录
  • 前言
  • 一、按位与(&)
  • 二、按位或(|)
  • 三、按位异或(^)
  • 四、按位异或(⊙)
  • 五、按位取反(~)
  • 六、左移()
  • 八、单片机中的应用
  • 总结

一、按位与(&)

运算规则:参加运算的两个操作数(二进制模式),只有当相应位上全部为1时取1, 存在0时为0

 1&1=1  1&0=0 0&1=0 0&0=0
 1110 &0100 = 0100

注:与这个两个的区别 &&:逻辑与,运算符两边的表达式的值都为true运算结果为true, 其余情况为false

||:逻辑或 运算符两边的表达式的值都为false运算结果为false, 其余情况为true

与运算的作用: 1.清零 如果想将某位清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零

led &=0XFF0F; //将led第 4-7 位清 0

2.取一个数的指定位

led = 1101 0111
led & 0000 1111  = 0000 0111 //取led的低四位,

取某个数x的低几位,只需要另找一个数y,令y的低几位为1,其余位为0,然后将x与y进行按位与运算(x&y)即可得到x的指定位

3.判断奇偶 只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。

二、按位或(|)

运算规则:参加运算的两个操作数(二进制模式),只要当相应位上存在1时取1, 全部为0时为0

1101 0101 | 0010 0010 = 1111 0 111

作用: 置1:常用来对一个数据的某些位设置为1

led | 0000 1111 将led的低四位置1
三、按位异或(^)

运算规则:参加运算的两个操作数(二进制模式),只有当相应位上的数字不相同时取1, 相同为0

1^1 = 0 0^0 = 0 0^1=1^0 = 1

作用: 1.翻转指定位(与1相异或值变化) 比如将数 X=1010 1110 的低4位进行翻转,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行异或运算(X^Y=1010 0001)即可得到。

2.与0相异或值不变

1010 1110 ^ 0000 0000 = 1010 1110

3.交换两个数

void Swap(int &a, int &b)
{
    if (a != b)
    {
        a ^= b;
        b ^= a;
        a ^= b;
    }
}
四、按位异或(⊙)

运算规则:参加运算的两个操作数(二进制模式),只有当相应位上的数字相同时取1, 不相同为0

1⊙1 = 0⊙0 = 1 0⊙1=1⊙0 = 0
五、按位取反(~)

运算规则:操作数(二进制模式),0变1,1变0

~(1001) = 0110
六、左移(
关注
打赏
1665385461
查看更多评论
立即登录/注册

微信扫码登录

0.0759s