一、移位操作
1、位运算的规则是对二进制数字进行移位补零操作(高位舍弃,低位补零)
2、位运算符
<< | 左移 |
>> | 右移 |
>>> | |
& | 按位与 |
| | 按位或 |
^ | |
~ |
3、右移一位相当于除2,右移n位相当于除以2的n次方(右移正数补0,负数补1)
4、左移一位相当于乘2,左移n位相当于乘以2的n次方
5、除法的效率比移位运算效率低得多,善于利用移位运算可以大大提升算法效率
二、以剑指offer中第十五题为例,利用移位操作判断输入十进制数的二进制1的个数
//由于负数的最高位补1机制对负数运行会陷入死循环的算法
int NumberOf1(int n)
{
int count=0;
while(n)
{
if(n&1) //按位与,判断位数是否为1
count++;
n=n>>1; //右移n
}
return count;
}
//左移的解法,不会导致死循环
int NumberOf1(int n)
{