二进制有关操作模板
wangbinfeng · · 算法·理论
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; }
- 【方法一】 库函数: