Pixiv - Miracle
5-位运算
281 字
1 分钟
5-位运算
位运算
格雷码
正变换
二进制数存在一一对应的关系
假如低位是0,+1则只有最后一位变化,异或右移的本身时只有最后一位发生变化,假如低位是连续的k个1,那么从0计数,+1的话第k个位置会翻转,0-k-1会翻转变成0,由于前面相同,而紧接着前面的k位置一个为0一个为1,k-1位置由于k和k-1在+1的过程中各自都翻转了所以不变,0-k-1位置两个都是连续的相同所以也一样,只有第k个位置会发生变化,
逆变换
int x = g;
for (; g; g >>= 1) x ^= g;
return x;状态压缩
//TODO
数位
1-base即长度
10进制下有
有
| 段 | 公式 |
|---|---|
| (high) | |
| (low) | |
| (unit) |
位运算常用函数
bit_width(x) = 1 + floor(log2(x))
int bit_width(unsigned x) { int res = 0; while (x) { ++res; x >>= 1; } return res;}lowbit(x) = x & -x
countr_zero(x) = bit_width(lowbit(x)) - 1
int countr_zero(unsigned x) { if (x == 0) return 32; return bit_width(x & -x) - 1;}文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
随机文章 随机推荐