“ Ctrl AC!一起 AC!”
lowbit运算:
lowbit(x)=x&(-x)
整数在计算机中是以补码形式存储的,把一个补码表示的整数x变成其相反数-x相当于
· 把x的二进制的每一位都取反,然后末位加1
或
· 直接把x的二进制最右边的1的左边的每一位都取反
所以
lowbit(x)=x&(-x) 就是取x的二进制最右边的1和它右边的所有0
因此它一定是2的幂次
所以
lowbit(x)也可以理解为能整除x的最大2的幂次
例:
分别 求 能整除 24 和 6 的最大2的幂次
(输出 8 和 2)
#include<bits/stdc++.h>
using namespace std;
int main(){
int lowbit_24=24&(-24);
int lowbit_6=6&(-6);
printf("能整除24和6的最大2的幂次分别是:%d,%d",lowbit_24,lowbit_6);
return 0;
}
感谢阅读!!!
“ Ctrl AC!一起 AC!”