位运算概述
从现代计算机中所有的数据都以二进制的形式存储在设备中。即0、1两种状态,计算机对二进制进行的运算(+、-、*、/)都叫位运算。示例:
1 | int a = 35; |
计算a+b的值,在计算机中就是以二进制进行运算的。所以上面我们所给的int变量会在机器内部先转换为二进制在进行相加:
1 | 35: 0 0 1 0 0 0 1 1 |
所以,合理的运用位运算更能显著提高代码在机器上的运行效率。
位运算符
含义 | 运算符 | 例子 |
---|---|---|
左移 | << | 0011 => 0110 |
右移 | >> | 0110 => 0011 |
按位或 | ︳ | 0011 ——- =>1011 1011 |
按位与 | & | 0011 ——- =>0011 1011 |
按位取反 | ~ | 0011 =>1100 |
按位异或 (相同为零不同为一) | ^ | 0011 ——- =>1000 1011 |
经典运用
不用加减乘除做加法
1 | //step1:异或查看两个数进行加法操作后的结果 |
二进制中1的个数
1 | public class Solution{ |
不使用第三个变量的情况下交换两个变量的值
1 | //原理:运用异或的特性 |
其他运用
- 判断一个数的奇偶性
1 | public void Test(int a){ |
- 两数的中位数
1 | public void Test(int a,int b){ |
- 两数的平均数
1 | public int average(int a,int b){ |
以上就是我今天分享的常见位运算的经典问题,其实位运算的应用远远不止这些,在算法方面适当的使用还是很有帮助的。