lowbit
:
lowbit(x)
是 $x$ 的二进制表达式中最低位的1所对应的值
template<typename T>
T lowbit(T x){
return x&-x;
}
- 求二进制中
1
的个数:
- 【方法一】 库函数:
__builtin_popcountll(n)
- 附库函数的具体实现:
unsigned popcount (unsigned u){
u = (u & 0x55555555) + ((u >> 1) & 0x55555555);
u = (u & 0x33333333) + ((u >> 2) & 0x33333333);
u = (u & 0x0F0F0F0F) + ((u >> 4) & 0x0F0F0F0F);
u = (u & 0x00FF00FF) + ((u >> 8) & 0x00FF00FF);
u = (u & 0x0000FFFF) + ((u >> 16) & 0x0000FFFF);
return u;
}
- 【方法二】 编程实现:
- 【方法二·①】
template<typename T>
T popcnt(T x){
T ret=0;
for(;x;x&=x-1)ret++;
return ret;
}
- 【方法二·②】
template<typename T>
T popcnt(T x){
T ret=0;
for(;x;x>>=1)if(x&1)ret++;
return ret;
}
标签:return,二进制,lowbit,ret,template,操作,模板,库函数
From: https://www.cnblogs.com/WangBF/p/17737738.html