二进制与位运算(数学篇)
PS:本文主要介绍位运算的数学性质,和OI没有太大关联.
Part0:符号约定
[p]:艾弗森记号.对于命题p,当p成立时,[p]为1,否则为0.
xi:x在二进制下的第i位数.
Part1:二进制
对于任意的非负整数x,众所周知,其可以表示为:
其中,n=⌊log10x⌋,bi∈{0,1,2,…,9}(i=1,2,…,n).我们把该式中的所有10都换成2,则有:
其中,n=⌊log2x⌋,bi∈{0,1}(i=1,2,…,n).我们将数位
称为x的二进制(分解),这种分解是惟一的.为方便,我们在本文中简记xi=bi,为x在二进制下的第i位数.
Part2:二进制递推式与位移运算
我们来考虑x,⌊x2⌋,2x二进制之间的关系.因
故有
显然左边的加数整除2.又x0∈{0,1},故x02=0.所以
这相当于把整个二进制往右移1位,并把不为整数的部分截掉,比如,11=1011(2),则
再来考虑2x.
因
故
这相当于把整个二进制往左移1位,并在低位补全零,比如,6=110(2),则
更一般地,有
其中k∈N+.我们把这两种运算分别称为右移(right shift)和左移(left shift),分别记为
特别地,当k>n时,x≫k=0.右移的意义是将二进制往右移k位,并将不为整数的部分截掉;左移的意义是讲二进制往左移k位,并在低位补全零.我们很容易得到:
这就是二进制的递推式.亦即:
这样就可以快速地求出一个非负整数的二进制表示了.
Part3:与运算和或运算
对于两个非负整数x,y,设
定义
为x与y的与运算(and operation).而
为x与y的或运算(or operation).显然有
Part4:取反
一个数的取反运算(not operation)定义为
相当于把值为1的位改成0,把值为0的位改成1.一般地,有
Part5:异或
这是我们要重点讨论的位运算.其定义为
显然有|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=4.进一步带入第二个方程有
故得
于是
因此原方程组的解为
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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编程运行原理