C/C++语言中逻辑右移和算数右移共享同一个运算符>>
如果运算数类型是unsigned则采用逻辑右移,而signed则采用算数右移。对于signed类型的数据,如果需要使用算数右移,或者unsigned类型的数据需要使用逻辑右移,都需要进行类型转换。
#include<iostream>
using namespace std;int main(){int a=0xFFFFFFFF;cout<<(unsigned)a>>1<<endl;cout<<(a>>1)<<endl;
常用位运算技巧:
1. n&1,n>>=1;
n>>=1 即 n=n>>1
2. n=n&(n-1)
n&(n-1):把n的二进制中,最后一个出现的1改为0
3.异或
异或:同0异1
任何数和本身异或为0
应用举例:将nums中所有数字执行异或运算,留下的结果则为出现一次的数字x
即
4.进位:carry=(a&b)<<1