作者:力扣(LeetCode)
链接:https://www.zhihu.com/question/38206659/answer/736472332
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1.【乘除2】
int a = 2;
a >> 1; //【表示除2】
a << 1; //【表示乘2】
2.【交换两个数】
void swap(int a, int b)
{
a ^= b;
b ^= a;
a ^= b;
}
3.【判断奇偶性】
if((a & 1)==0) //偶数
if((a & 1)==1) //奇数
4.【正数变成负数,负数变成正数】
int reversal(int a)
{
return ~a + 1;
}
5.【求绝对值】
int abs(int a)
{
int i = a >> 31;
return i == 0 ? a : (~a + 1);
}
int abs2(int a)
{
int i = a >> 31;
return ((a^i) - i);
}
6.求高低位交换
unsigned short a = 34520;
a = (a >> 8) | (a << 8);
7.二进制逆序
unsigned short a = 34520;
a = ((a & 0xAAAA) >> 1) | ((a & 0x5555) << 1);
a = ((a & 0xCCCC) >> 2) | ((a & 0x3333) << 2);
a = ((a & 0xF0F0) >> 4) | ((a & 0x0F0F) << 4);
a = ((a & 0xFF00) >> 8) | ((a & 0x00FF) << 8);
8.统计二进制中 1 的个数
count = 0
while(a)
{
a = a & (a - 1);
count++;
}
9.【取模运算】
a需>0且b为2的倍数
a % b == >a & (b - 1)
需n<2m
n%m ==> n-(m>n?0:m)