位运算相关
六种位运算符
- & 按位与
- | 按位或
- ^ 按位异或
- ~ 取反
- << 左移
- >> 右移
常见位运算操作
1、字母大小写转换
- 统一转成大写:ch & 0b11011111 简写:ch & 0xDF
- 统一转成小写:ch | 0b00100000 简写:ch | 0x20
比较的时候注意加上小括号哦,因为位运算优先级比较低。
2、判断奇偶性
- i & 1
- 1 为奇数
- 0 为偶数
3、交换变量
a^=b; b^=a; a^=b;
第一步没啥好说a = a^b
第二步:b=b^a,也就是b=b^a^b,也就是b=a^0,此处换值
第三步:a=a^b 也就是a=a^b^a,也就是b
4、取int型变量a的第k位
a>>k&1
其中,k=0,1,2……sizeof(int),这里的位数指的是二进制数位,从低到高,从右到左
1 >>> bin(22) 2 '0b10110' 3 >>> 22>>3&1 4 0 5 >>> 22>>2&1 6 1
5、将int型变量a的第k位清0
- a=a&~(1<<k)
1 >>> bin(22) 2 '0b10110' 3 >>> a = 22 4 >>> a = a&~(1<<2) 5 >>> bin(a) 6 '0b10010'
6、将int型变量a的第k位置1
a=a|(1<<k)
1 >>> bin(22) 2 '0b10110' 3 >>> a = 22 4 >>> a = a|(1<<3) 5 >>> bin(a) 6 '0b11110'
7、判断一个整数是不是2的幂,对于一个数 x >= 0,判断他是不是2的幂
1 def power2(x) 2 return ((x&(x-1))==0) and (x!=0);
8、取模运算转化成位运算 (在不产生溢出的情况下)
- a % (2^n) 等价于 a & (2^n - 1)
- a % 2 等价于 a & 1 ( a & log2(2))
- a % 4 等价于 a & 2 ( a & log2(4))
- .....
- a % 32 等价于 a & 5
9、乘法运算转化成位运算 (在不产生溢出的情况下)
- a * (2^n) 等价于 a<< n
10、除法运算转化成位运算 (在不产生溢出的情况下)
- a / (2^n) 等价于 a>> n
例: 12/8 == 12>>3
11、
if (x == a) x= b;
else x= a;
- 等价于 x= a ^ b ^ x;
12、x 的 相反数
- 表示为 (~x+1)