位运算符

22 篇文章 0 订阅
18 篇文章 1 订阅

提供一个大佬的博客:(:绝对强大

https://blog.csdn.net/zmazon/article/details/8262185

功能介绍

 

说明 

样例

    & 

按位与

把参数与运算的两个数位相与,只有对应的的二进制均为1时,结果对应的位才为1,否则为0

9&5中的9可以写成(00001001),5可以写成(00000101),那么9&5的运算结果为(00000001),输出十进制结果为1.

    |

按位或

把参数与运算的两个数位相或,只要对应的的二进制位有一个为1时,结果对应的位就为1,否则为0

9|5中的9可以写成(00001001),5可以写成(00000101),那么9|5的运算结果为(00001101),输出十进制结果为13.

    ^

按位异或

把参数与运算的两个数位相异或,当对应的二进制位上的数据数据字相同时,结果为0,否则为1

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

9^5相当于00001001^00000101,运算结果为00001100,十进制结果为12.

    ~

取反

把运算符的各个er'j二进制位按位求反。

~9相当于~(00001001),运算结果为11110110,相当于十进制246
  <<

 

左移

把“<<”左边的运算数的各二进制位全部左移若干位,"<<“右边的数是指定移动的位数,高位舍弃,低位补零.

a<<4指把a的各个二进制位向左移动四位,如a=00000011(十进制为3),左移四位后为(00110000),十进制表示为48.

  >>

右移

把“>>”左边的运算数的各二进制位全部右移若干位,">>“右边的数是指定移动的位数,高位补零,低位舍弃.

设a=15,a>>2表示把001111右移为00000011(十进制为3)。

经常使用的点

1. 使用按位与判断数的奇偶性,

1&a==1,表示a为奇数

1&a==0,表示a为偶数

2.使用按位异或,交换两个数的值,不使用临时变量

性质:

交换性:a^b=b^a

结合性:a^b^c=(a^b)^c=a^(b^c)

相同异或:a^a=0

与 0 异或不变:a^0=a

使用方法

void swap(int & a,int & b)
{
    if(a==b)
        return ;
    a^=b;
    b^=a;
    a^=b;
}

详解

一:a = a ^ b,a的值fa'sh发生变化

二:b = a ^ b,  将 a =a ^ b带入,得到 b=(a ^ b) ^ b=a ^ (b ^ b)=a ^ 0=a,即运算后 b 的值为 a

三:a = a ^ b,a 的值仍然是 a ^ b,b 的值为 a,执行后,得到 a=(a ^ b) ^ a=a ^ a^ b=0 ^ b=b

注意的是a!=b,当a==b时,a^b=0,不能继续执行

3.使用左移||右移符进行除2或者*2运算

a>>=1…………a=a/2;

a<<=1…………a=a*2;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值