1、什么是位运算?
计算机中的数在内存中都是以二进制形式进行存储的 ,而位运算就是直接对整数在内存中的二进制位进行操作,所以执行效率非常高。
2、位运算的运算符
符号 | 描述 | 运算规则 |
& | 与 | 两个位都为1,结果才为1 |
| | 或 | 两个位都为0时,才为0;有一个为1,结果为1 |
^ | 异或 | 两个位相同为0,不同为1 |
~ | 取反 | 0变1,1变0 |
<< | 左移 | 计算指定数值左移n位,乘2的n次方 |
>> | 右移 | 计算指定数值右移n位,除以2的n次方 |
3、常见的位运算使用场景
1)判断奇偶数(&与运算)
运算规则:同时1,结果为1,否则为0
偶数:二进制的最低位是0
奇数:二进制的最低位是1
偶数判断:2的二进制数是0010
奇数判断:3的二进制数是0011
2)判断一个整数n,是否是2的幂
分析:正整数n如果是2的幂,则n的其二进制仅包含一个1
2的二进制:10 4的二进制:100 8的二进制:1000 16的二进制:10000
实现思路:整数n如果为2的n次幂,二进制形式为10、100、1000,10000;则n-1的计算结果,转换为二进制形式为01、011、0111、01111;两者进行与运算,结果必为0。
3)判断一个整数n,是否是4的幂
分析:如果n是4的幂,那么n一定也是2的幂, 所以,先判断n是否是2的然后,在判断n是否是4的幂, 如果n是4的幂,则n的二进制仅包含一个1,并且一定在偶数位(低位从0开始计算)。
4的二进制:100 16的二进制:10000 64的二进制:1000000 256的二进制:100000000
实现思路:定义一个整数mask,二进制的偶数位均为0,奇数位均为1,二进制:10101010101010101010101010101010,十六进制:0xaaaaaaaa整数mask与n进行&与运算,如果1出现在偶数位,则计算结果位0。
4)交换两个数(^异或运算,也可以使用中间值)
5)找出没有重复的数(^异或运算)
分析:两个相同整数进行^异或运算,结果为0
任何整数与0进行^异或运算,结果为整数本身
实现思路:将n个整数累计^异或,最终结果为仅出现1次的整数