位运算(公式 + 技巧)

1. &

11 
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
x & 0 = 0 // 清零 0 
x & 1 = x // 取位 (x 为二进制下的 某一位)
取位, 清零,判定奇偶
1) n & 1 		// 判断奇偶性
2) n & (n - 1)	// 去除最低位 1 用途:求 1 的个数, 判断是否为 2 的整数次幂
3) n & -n		// lowbit 取出最低位 1 00...
4) n >> k & 1	// 取出 n 的第 k 位
5)n & ((1 << k) - 1)	// 取出前 k 位
6) n & (~(1 << k))		// 清零第 k 位

2. |

00 
0 | 0 = 0
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1
x | 1 = 1 // 赋值 1 
赋值 1, 
1) n | 1 << k	// 赋值 n 的第 k 位为 1
2) 

3. ~

取反 : ~0 = 1; ~1 = 0

4. ^

01 : 0 ^ 0 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1; 1 ^ 1 = 1
0 ^ 0 = 0
1 ^ 0 = 1 
1 ^ 1 = 0
0 ^ 1 = 1
x ^ 0 = x // 原位 
x ^ 1 = ~x // 取反 
性质 :
 a ^ a = 0 ; 
 a ^ 0 = a ; 
 a ^ b = b ^ a ; 
 a ^ b ^ c = (a ^ b) ^ c = a ^ (b ^ c) ; 
 a ^ b ^ a = b ; 
应用 : 取反, 
1) n ^ 1		// 取反 n 的最低位
2) n ^ 1 << k	// 取反 n 的第 k 位
2

5. << 和 >>

2 次幂 相关
11 << n		// 2 的 n 次幂
2) n << k		// n * (2 的 k 次幂), 最低位后面 添 0
3) n << k + 1	// 最低位后面 添 1
4) n >> k		// n / (2 的 k 次幂), 去除最低位

7. 技巧

n >> k & 1 			// 取出整数 n 在二进制下的第 k 位 
n & ((1 << k) - 1)	// 取出整数 n 在二进制下的前 k 位
n ^ 1 << k			// 把整数 n 在二进制下的第 k 位取反
n | 1 << k			// 对整数 n 在二进制下的第 k 位赋值 1 
n & (~(1 << k))		// 对整数 n 在二进制下的第 k 位赋值 0  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值