PS:本文主要介绍位运算的数学性质,和OI没有太大关联.
Part0:符号约定
[p]:艾弗森记号.对于命题p,当p成立时,[p]为1,否则为0.
xi:x在二进制下的第i位数.
Part1:二进制
对于任意的非负整数x,众所周知,其可以表示为:
x=n∑i=010ibi
其中,n=⌊log10x⌋,bi∈{0,1,2,…,9}(i=1,2,…,n).我们把该式中的所有10都换成2,则有:
x=n∑i=02ibi
其中,n=⌊log2x⌋,bi∈{0,1}(i=1,2,…,n).我们将数位
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯bnbn−1…b1b0(2)
称为x的二进制(分解),这种分解是惟一的.为方便,我们在本文中简记xi=bi,为x在二进制下的第i位数.
Part2:二进制递推式与位移运算
我们来考虑x,⌊x2⌋,2x二进制之间的关系.因
x=n∑i=02ixi
故有
⌊x2⌋=⎢⎢
⎢
⎢
⎢
⎢
⎢⎣n∑i=02ixi2⎥⎥
⎥
⎥
⎥
⎥
⎥⎦=⎢⎢
⎢
⎢
⎢
⎢
⎢⎣n∑i=12ixi2+x02⎥⎥
⎥
⎥
⎥
⎥
⎥⎦
显然左边的加数整除2.又x0∈{0,1},故x02=0.所以
⌊x2⌋=n∑i=12i−1xi=n−1∑i=02ixi+1
这相当于把整个二进制往右移1位,并把不为整数的部分截掉,比如,11=1011(2),则
⌊112⌋=⌊1011(2)2⌋=101(2)=5
再来考虑2x.
因
x=n∑i=02ixi
故
2x=n∑i=02i+1xi=n+1∑i=12ixi−1
这相当于把整个二进制往左移1位,并在低位补全零,比如,6=110(2),则
2×6=2×110(2)=1100(2)=12
更一般地,有
⌊x2k⌋=n−k∑i=02ixi+k2kx=n+k∑i=k2ixi−k
其中k∈N+.我们把这两种运算分别称为右移(right shift)和左移(left shift),分别记为
x≫k=⌊x2k⌋x≪k=2kx
特别地,当k>n时,x≫k=0.右移的意义是将二进制往右移k位,并将不为整数的部分截掉;左移的意义是讲二进制往左移k位,并在低位补全零.我们很容易得到:
x=(x≫1)≪1+(xmod2)
这就是二进制的递推式.亦即:
x=2⌊x2⌋+(xmod2)
这样就可以快速地求出一个非负整数的二进制表示了.
Part3:与运算和或运算
对于两个非负整数x,y,设
x=n∑i=02ixi,y=m∑i=02iyi,
定义
x and y=x∧y=min{n,m}∑i=02i[xi=1∧yi=1]=min{n,m}∑i=02ixiyi=min{n,m}∑i=02i⌊xi+yi2⌋
为x与y的与运算(and operation).而
x or y=x∨y=max{n,m}∑i=02i[xi=1∨yi=1]=max{n,m}∑i=02i⌈xi+yi2⌉
为x与y的或运算(or operation).显然有
x∧y≤max{x,y}x∨y≥min{x,y}
Part4:取反
一个数的取反运算(not operation)定义为
¬x=n∑i=02i[xi=0]
相当于把值为1的位改成0,把值为0的位改成1.一般地,有
x+¬x=2n+1−1,¬¬x=x.
Part5:异或
这是我们要重点讨论的位运算.其定义为
x xor y=x⊕y=max{n,m}∑i=02i[xi≠yi]=max{n,m}∑i=02i(xi+yimod2)
显然有|x−y|≤x⊕y≤x+y.容易验证,异或运算(exclusive or operation,xor operation)具有以下性质:
1.交换性:x⊕y=y⊕x.
2.结合性:x⊕y⊕z=(x⊕y)⊕z=x⊕(y⊕z).
3.幂零性:x⊕x=0.
4.还原性:x⊕y⊕x=y.特别地,有x⊕0=0⊕x=x.
4′.转换性:w=x⊕y⊕z⇒x=w⊕y⊕z.
5.与其它位运算的关系:x⊕y=(¬x∧y)∨(x∧¬y).
Part6:位运算方程
我们把形如只含有以下三种运算的方程叫做位运算方程(组)(bit operation equations):
1.位移常数
2.异或
3.取反
显然,这几种运算是可逆的.先来一道简单题.考虑位运算方程组
⎧⎨⎩x⊕y=z¬z=4x≫2=1
根据第三个方程,易知
x=1≪2=4.
根据第二个方程,有
z=¬4=3.
因此,
y=z⊕x=3⊕4=7.
所以原方程组的解为
⎧⎨⎩x=4,y=7,z=3.
再来考虑位运算方程组:
⎧⎪
⎪
⎪⎨⎪
⎪
⎪⎩x⊕y⊕z=w(¬x)⊕y=6x≫2=1z⊕(¬y)=9
显然有x=4.进一步带入第二个方程有
y=6⊕(¬x)=6⊕3=5.
故得
z=9⊕(¬y)=9⊕2=11.
于是
w=x⊕y⊕z=4⊕5⊕11=10.
因此原方程组的解为
⎧⎪
⎪⎨⎪
⎪⎩x=4,y=5,z=11,w=10.
本文完
The man who follow the shadow is just the shadow itself.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY