位运算学习笔记

按位与 &

xyans
111
100
010
000

eg1. 计算3&5

  00000011
& 00000101
-----------
  00000001

3&5=1

用途

  1. 清零。

注: x & 0 = 0

2.取一个数的指定二进制位。

eg2. 求9的第三位为1还是0.

  00001001
& 00000100
----------
  00000000

如果ans为1,则该位上为1。

否则,则该位上为0。

3.奇偶性

如果该数&1的结果为1,则该数为奇数。

否则,则该数为偶数。

按位或 |

xyans
111
101
011
000

eg3. 计算3|5

  00000011
| 00000101
-----------
  00000111

3&5=7

用途

将该数的某一位置1。

eg4. 求18的第三位置1.

  00010010
| 00000100
----------
  00010110

按位异或 ^

xyans
110
101
011
000

eg5. 计算3^5

  00000011
^ 00000101
-----------
  00000110

3^5=6

用途

  1. 翻转二进制位

eg6. 反转23的所有二进制位.

  00010111
^ 11111111
----------
  11101000
  1. 任何数^0值不变

  2. 交换两个数

void Swap (int &a, int &b) {
	a ^= b ^= a ^= b;
}

按位取反 ~

xans
01
10

eg7. 计算~3

  00000011
~
-----------
  11111100

用途

二进制最低位置0。

左移/右移

3 << 2

11 -> 1100, 即12

15 >> 2

11111 -> 111, 即3

复合运算符

运算符复合运算符
a = a & b;a &= b;
`a = ab;`
a = a ^ b;a ^= b;
a = a << b;a <<= b;
a = a >> b;a >>= b;

注意

  1. 负数在进行&和|运算时,按照补码的方式参与运算。

补码=反码+1

反码:二进制码除符号位外取反。

  1. 算术优先级
符号解释
/除号
*乘号
%(取余)模号
+加号
-减号
<<按位左移
>>按位右移
>大于号
>=大于等于号
<小于号
<=小于等于号
==等于号
!=不等于号
&按位与
^按位异或
``
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值