5-位运算

281 字
1 分钟
5-位运算

位运算#

格雷码#

正变换#

二进制数存在一一对应的关系

n(n>>1)n \oplus (n >> 1)

假如低位是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进制下有

n=anan1aia2a1n =a_na_{n-1}\ldots a_{i}\ldots a_2a_1

公式
anai+1a_n\ldots a_{i + 1}(high)n/10in / 10^i
ai1a1a_{i-1}\ldots a_{1}(low)n%10i1n \% 10^{i-1}
aia_i(unit)n/10i1%10n / 10^{i-1} \% 10

位运算常用函数#

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;
}

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

5-位运算
https://skaco2.com/posts/01-algorithm/5-位运算/
作者
SKACO2
发布于
2026-04-08
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
SKACO2
Hello……
公告
欢迎来到我的博客!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
53
分类
8
标签
54
总字数
58,255
运行时长
0
最后活动
0 天前

目录