LeetCode: 位运算 题型知识点

LeetCode: 位运算 题型知识点

与运算: &
或运算: |
异或运算: ^

左移:分为带符号左移和无符号左移
无符号左移:<< (相当于乘2)。低位补0 。
带符号左移:<<< 。正数左移低位补0,负数左移低位补1。

右移:分为带符号右移和无符号右移
无符号右移:>> (相当于除2)。高位补0 。
带符号右移:>>>。正数右移高位补0,负数右移高位补1。比如:4 >> 1,结果是2;-4 >> 1,结果是-2。-2 >> 1,结果是-1。


  • 判断x的最后一位是0还是1: (x & 1) == 1; 这里注意一定要在前面加(),不然会报错。
    78. 子集
  • 最低位的1变成0 : n & (n-1)可以用来判断一个数是否为2的幂231. 2的幂
  • 计算一个二进制数有几个1:
int count = 0;
while(n!=0){
	count++;
	n = n & (n-1);
}
return count;
  • 去掉偶数的重复用异或运算
    异或运算的特点是对于两个相同的数 x ^ x = 0。
    比如一个集合内只有一个数出现奇数次,其他数出现偶数次,则可以用异或运算把所有元素异或一遍,剩下的数就是出现奇数次的数。
    389. 找不同
    268. 丢失的数字
  • 用位运算代替加减法
    用异或运算计算非进位部分,用与运算和位移运算计算进位部分
    371. 两整数之和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值