Processing math: 100%

二进制与位运算(数学篇)

PS:本文主要介绍位运算的数学性质,和OI没有太大关联.

Part0:符号约定

[p]:艾弗森记号.对于命题p,当p成立时,[p]1,否则为0.

xi:x在二进制下的第i位数.

Part1:二进制

对于任意的非负整数x,众所周知,其可以表示为:

x=ni=010ibi

其中,n=log10x,bi{0,1,2,,9}(i=1,2,,n).我们把该式中的所有10都换成2,则有:

x=ni=02ibi

其中,n=log2x,bi{0,1}(i=1,2,,n).我们将数位

¯bnbn1b1b0(2)

称为x二进制(分解),这种分解是惟一的.为方便,我们在本文中简记xi=bi,为x在二进制下的第i位数.

Part2:二进制递推式与位移运算

我们来考虑x,x2,2x二进制之间的关系.因

x=ni=02ixi

故有

x2=ni=02ixi2=ni=12ixi2+x02

显然左边的加数整除2.又x0{0,1},故x02=0.所以

x2=ni=12i1xi=n1i=02ixi+1

这相当于把整个二进制往右移1位,并把不为整数的部分截掉,比如,11=1011(2),则

112=1011(2)2=101(2)=5

再来考虑2x.

x=ni=02ixi

2x=ni=02i+1xi=n+1i=12ixi1

这相当于把整个二进制往左移1位,并在低位补全零,比如,6=110(2),则

2×6=2×110(2)=1100(2)=12

更一般地,有

x2k=nki=02ixi+k2kx=n+ki=k2ixik

其中kN+.我们把这两种运算分别称为右移(right shift)左移(left shift),分别记为

xk=x2kxk=2kx

特别地,当k>n时,xk=0.右移的意义是将二进制往右移k位,并将不为整数的部分截掉;左移的意义是讲二进制往左移k位,并在低位补全零.我们很容易得到:

x=(x1)1+(xmod2)

这就是二进制的递推式.亦即:

x=2x2+(xmod2)

这样就可以快速地求出一个非负整数的二进制表示了.

Part3:与运算和或运算

对于两个非负整数x,y,设

x=ni=02ixi,y=mi=02iyi,

定义

x and y=xy=min{n,m}i=02i[xi=1yi=1]=min{n,m}i=02ixiyi=min{n,m}i=02ixi+yi2

xy与运算(and operation).而

x or y=xy=max{n,m}i=02i[xi=1yi=1]=max{n,m}i=02ixi+yi2

xy或运算(or operation).显然有

xymax{x,y}xymin{x,y}

Part4:取反

一个数的取反运算(not operation)定义为

¬x=ni=02i[xi=0]

相当于把值为1的位改成0,把值为0的位改成1.一般地,有

x+¬x=2n+11,¬¬x=x.

Part5:异或

这是我们要重点讨论的位运算.其定义为

x xor y=xy=max{n,m}i=02i[xiyi]=max{n,m}i=02i(xi+yimod2)

显然有|xy|xyx+y.容易验证,异或运算(exclusive or operation,xor operation)具有以下性质:

1.交换性:xy=yx.

2.结合性:xyz=(xy)z=x(yz).

3.幂零性:xx=0.

4.还原性:xyx=y.特别地,有x0=0x=x.

4.转换性:w=xyzx=wyz.

5.与其它位运算的关系:xy=(¬xy)(x¬y).

Part6:位运算方程

我们把形如只含有以下三种运算的方程叫做位运算方程(组)(bit operation equations):

1.位移常数

2.异或

3.取反

显然,这几种运算是可逆的.先来一道简单题.考虑位运算方程组

{xy=z¬z=4x2=1

根据第三个方程,易知

x=12=4.

根据第二个方程,有

z=¬4=3.

因此,

y=zx=34=7.

所以原方程组的解为

{x=4,y=7,z=3.

再来考虑位运算方程组:

{xyz=w(¬x)y=6x2=1z(¬y)=9

显然有x=4.进一步带入第二个方程有

y=6(¬x)=63=5.

故得

z=9(¬y)=92=11.

于是

w=xyz=4511=10.

因此原方程组的解为

{x=4,y=5,z=11,w=10.

本文完

posted @   Anverking  阅读(2144)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示