1、获得第 i 位的数字
(a>>i)&1
2、设置第 i 位为 1
a=a|(1<<i)
3、设置第 i 位为 0
a=a&(~(1<<i))
4、把第 i 位取反
a=a^(1<<i)
5、lowbit函数(用来取一个二进制最低位的1与后边的 0 组成的数 )
方法一: a&(-a) ,原理:二进制数的负数是正数取反加一
方法二: a - ( a & (a-1) ),原理: 先消掉最后一位1,然后再用原数减去消掉最后一位 1
后的数
6、把最后一个1变成0
x=x&(x−1)
7、判断一个正整数是不是 2的整数次幂
if ((i & (i - 1)) == 0)
8、判断奇偶数
if(0 == (a & 1)) {
//偶数
}
9、交换符号:正数变负数,负数变正数
int reversal(int a) {
return ~a + 1;//整数取反加 1,正好变成其对应的负数 (补码表示);负数取反加一,则变为其原码,即正数
}
10、求绝对值
//整数的绝对值是其本身,负数的绝对值正好可以对其进行取反加一求得,即我们首先判断其符号位(整数右移 31 位得到 0,负数右移 31 位得到 -1, 即 0xffffffff),然后根据符号进行相应的操作
int abs2(int a) {
int i = a >> 31;//取符号位
return ((a^i) - i);//整数时 a 与 0 异或得到本身,再减去 0,负数时与 0xffffffff 异或将 a 进行取反,然后在加上 1,即减去 i (i =-1)
}
参考:
https://blog.youkuaiyun.com/han_hhh/article/details/82432316
https://www.cnblogs.com/liubilan/p/9457083.html
https://www.zhihu.com/question/38206659/answer/736472332