前言
在刷leetcode的时候为了提高效率,很多操作可以使用位运算来进行优化,此文用于收集并总结位运算的相关操作。位运算基础知识可见:传送门。
内容
实现四则运算
这个太硬核了,看看就行,要是写代码这样那就太夸张了Fight!!(o-)~’'☆ミ☆ミ
加一操作
常规代码:
int a = 1;
a += 1;
位运算代码:
int a = 1;
a = -~a;
减一操作
int a = 1;
a -= 1;
位运算代码:
int a = 1;
a = ~-a;
乘以2操作
只要是乘以2的次方都可以进行该操作,乘以2的多少次方就左移多少。
常规代码:
b = a * 2;
位运算代码:
b = a << 1;
乘以2并加1操作
常规代码:
b = a * 2 + 1;
位运算代码:
b = a << 1 | 1;
除以2操作
只要是除以2的次方都可以进行该操作,除以2的多少次方就右移多少。
常规代码:
b = a / 2;
位运算代码:
b = a >> 1;
取余(模)操作
注意:要求除数必须是2的次方数。
常规代码:
a = a % 4;
位运算代码:
a = a & (4 - 1);
判断奇偶
常规代码:
if(a % 2);//奇数
if(!(a % 2));//偶数
位运算代码:
if(a & 1);//奇数
if(!(a & 1));//偶数
交换两个数
常规代码:
int a = 1,b = 2,temp;
temp = a;
a = b;
b = temp;
位运算代码:
int a = 1,b = 2;
a ^= b;
b ^= a;
a ^= b;
大小写转换
其实这个不算神奇吧!
利用或操作|
和空格
将英文字符转换为小写
('a' | ' ') = 'a';
('A' | ' ') = 'a';
利用与操作&
和下划线
将英文字符转换为大写
('b' & '_') = 'B'
('B' & '_') = 'B'
利用异或操作 ^
和空格
进行英文字符大小写互换
('d' ^ ' ') = 'D'
('D' ^ ' ') = 'd'
异或判重
异或(^)
- 如果我们对0和二进制为做^运算,得到的仍然是这个二进制位。
0⨁0=0,0⨁1=1 - 如果我们对相同的二进制为做^运算,返回的结果是0 1⨁1=0,a⨁a=0(a可以是任何数
- ^满足交换律和结合律
a⨁b⨁a=(a⨁a)⨁b=0⨁b=b
相关leetcode题目:
136. 只出现一次的数字389. 找不同
后记
持续更新!