c++中的位运算相关规律总结和口诀

位运算应用口诀
清零取反要用与,某位置一可用或
若要取反和交换,轻轻松松用异或

<< >> >>>左移乘2,右移除2,无符号右移
&a&1判断最后1位/判断奇偶
^同0异1,a&b无进位相加
负数=add(~a,1)
优先级描述运算符
1括号()、[]
2正负号+、-
3自增自减,非++、--、!
4乘除,取余*、/、%
5加减+、-
6移位运算<<、>>、>>>
7大小关系>、>=、<、<=
8相等关系==、!=
9按位与&
10按位异或^
11按位或|
12逻辑与&&
13逻辑或||
14条件运算?:
15赋值运算=、+=、-=、*=、/=、%=
16位赋值运算&=、|=、<<=、>>=、 >>=

左移与右移--<<(左移乘2)与>>(右移除2)

a<<n <=> a*(2^n)  例如:a<<1 <=> a*2

a>>n <=> a/(2^n)  例如:a>>1 <=> a/2

1>>n <=> 2^n

按位与-- &

1 清零特定位 (mask中特定位置0,其它位为1,s=s&mask)

例:将char型变量a的最低位置0:a=a&0376=a&11111110
2 取某数中指定位 (mask中特定位置1,其它位为0,s=s&mask)

例:char c;short int a;取出a的低字节放在c中:c=a&0377=a&0000000011111111

a%(2^n) <=> a&(2^n-1)

a&1 ===>判断a的最后1位是0还是1,也可判断奇偶(如果a最后一位为1就输出1,最后一位为0就输出0)

例如:a%2<=> a&1, 其中,a&1==0表示a为偶数,a&1==1表示a为奇数(”0偶1奇“)

           a%4 <=> a&3

           a%8 <=> a&7

     a%16 <=> a&15

 

按位或-- |
常用来将源操作数某些位置1,其它位不变。 (mask中特定位置1,其它位为0 s=s|mask)

例:a=a|oxff=a|0000000011111111

位异或-- ^
1 使特定位的值取反 (mask中特定位置1,其它位为0 s=s^mask)
2 不引入第三变量,交换两个变量的值

void swap(int x , int y){

x ^= y; y ^= x; x ^= y;

}

注意:a^a=0  ,  a^0=a

 

按位取反--~

add(~a,1) =====>负数 等价于 a取反加1

~1不是-1,而是-2

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值