进制位技巧总结
进制位骚操作总结
lowbit
最低的为 的二进制位。
x&-x
利用负数二进制存储为补码的性质,我们知道负数补码是按位取反后+1,也就是原来最低的连续的一段 会疯狂进位直到遇到第一个 ,和原数按位与一下就可以了。
highbit
最高的为 的二进制位。
预处理 数组或者使用 函数。不要用 ,有 的常数。
k bit状态压缩
用二进制存储集合和状态的操作大家都知道吧。显然 进制也是可以的。
预处理 的幂次可以实现快速操作。
举一个 4 bit 的例子:
struct fourbit{
fourbit(int _x){
x=_x;
}
int x;
inline int pos(int p){
return (x/pw[p])%4;
}
inline void set(int p,int k){
x=x+(k*pw[p])-(pos(p)*pw[p]);
}
};
集合除去
x&(x^k)
在保证 的情况下, 异或将 从 中除去吗。但是如果不保证,我们可以通过与运算把误增加的元素除去。
枚举子集
for(int x=s;x;x=(x-1)&s)
这样就可以遍历 的子集。你发现每次子集的十进制数单调降,并且不会错过任何一个子集。因为每次把最低的 拉下来。需要注意的是,这个方法不会枚举到空集,需要特判一下。
枚举一个集合所有子集的子集是 的。分析
后续会持续更新。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具