百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python按位运算符的使用(python中按位或)

itomcoil 2025-03-28 17:40 17 浏览


任务要求

1.掌握按位运算符的二进制计算规则

2.实现数值处理、状态判断等应用场景

3.包含运算符优先级说明和复合用法

4.提供可扩展的代码模板

5.代码需兼容整数和负值处理

任务分析

Python按位运算符的特性:

1.二进制处理:直接操作整数二进制形式

2.效率优势:比常规运算快3-5倍

3.复合赋值:支持&=、|=等快捷写法

4.符号处理:负数采用补码表示法

5.应用边界:仅支持整型数据操作

任务实现

场景一:基础位运算演示

# 二进制转换辅助函数
def bin8(num): # 显示8位二进制
return format(num if num >= 0 else (1 << 8) + num, '08b')
a, b =
0b1010, 0b1100 # 10和12的二进制表示
print(f"按位与 {bin8(a)} & {bin8(b)} = {bin8(a & b)}") # 1000 (8)
print(f"按位或 {bin8(a)} | {bin8(b)} = {bin8(a | b)}") # 1110 (14)
print(f"按位异或 {bin8(a)} ^ {bin8(b)} = {bin8(a ^ b)}") # 0110 (6)
print(f"按位取反 ~{bin8(a)} = {bin8(~a)}") # 11110101 (-11)
print(f"左移两位 {bin8(a)} << 2 = {bin8(a << 2)}") # 101000 (40)
print(f"右移两位 {bin8(b)} >> 2 = {bin8(b >> 2)}") # 0011 (3)

运行结果:

按位与 00001010 & 00001100 = 00001000

按位或 00001010 | 00001100 = 00001110

按位异或 00001010 ^ 00001100 = 00000110

按位取反 ~00001010 = 11110101

左移两位 00001010 << 2 = 00101000

右移两位 00001100 >> 2 = 00000011

进程已结束,退出代码为 0

说明:

  • bin8()函数处理负数补码显示
  • num if num >= 0 else (1 << 8) + num用于处理二进制表示。对于非负数,直接使用num;对于负数,使用1 << 8(即256)加上该负数的值,以得到其8位补码表示。
  • format(..., '08b')将整数格式化为8位二进制字符串。08b中的0表示用零填充,8表示字符串长度为8,b表示二进制格式。
  • 按位运算符直接操作二进制每一位。
  • a & b按位与操作,结果是1010与1100的按位与,即1000(二进制),对应十进制的8。
  • a | b按位或操作,结果是1010与1100的按位或,即1110(二进制),对应十进制的14。
  • a ^ b按位异或操作,结果是1010与1100的按位异或,即0110(二进制),对应十进制的6。
  • ~a按位取反操作,对1010的每一位取反得到0101,但由于是在8位系统中解释,实际上得到了11110101(二进制),这对应于十进制的-11(注意:这里使用的是补码表示法)。
  • a << 2将1010左移两位,得到101000(二进制),对应十进制的40。
  • b >> 2将1100右移两位,得到0011(二进制),对应十进制的3。

案例1:奇偶判断与符号检测

def check_number(num):
is_even = num & 1 == 0 # 判断偶数
is_negative = num < 0
sign_bit = (num >> 31) & 1 # 获取符号位(32位系统)
return is_even, is_negative, sign_bit
print(check_number(-15)) # (False, True, 1)

运行结果:

(False, True, 1)

进程已结束,退出代码为 0

说明:

  • check_number()函数,用于检查传入的整数num的三个特性:是否为偶数、是否为负数以及其在32位系统中的符号位。
  • num & 1 == 0通过位运算来判断num是否为偶数。num & 1的含义是对num进行按位与运算,其中1的二进制表示为000...001(假设num为32位)。这个操作的结果实际上就是num的最低位,即其二进制表示的最右边一位。对于任何整数,若其最低位为0(即二进制为...0000),则该数为偶数;若最低位为1(即二进制为...0001),则为奇数。因此,num & 1 == 0返回True表示num是偶数,False则表示num是奇数。
  • (num >> 31) & 1获取num在32位系统中的符号位。num >> 31表示将num的二进制位向右移动31位。对于正数,这样操作会导致最高位(符号位)变为0,其余位全为0;对于负数,在2的补码表示法中,最高位(符号位)为1,向右移动31位后,所有位都会变成1(因为负数的补码表示法中,最高位为1,其余位由该数的绝对值的反码加1得到,反码加1后的最高位仍然是1)。然后使用& 1获取最低位的值,这样就可以得到符号位的值。如果num为负数,则sign_bit为1;如果num为正数或零,则sign_bit为0。

案例2:变量值交换

x, y = 5, 8
x ^= y # 等价于 x = x ^ y
y ^= x # y = y ^ x → 原x值
x ^= y # x = x ^ y → 原y值
print(x, y) # 8 5

运行结果:

8 5

进程已结束,退出代码为 0

说明:这段代码的主要功能是使用按位异或运算符实现两个变量x和y的值交换。这种方法避免了使用额外的存储空间来保存中间值,是一种原地交换的方法。

案例3:简单加密算法

def encrypt(text, key):
return bytes([ord(c) ^ key for c in text])
secret = encrypt(
"Python", 0x55)
print(f"加密数据:{secret}") # b'\x15\x1e\x0c\x1d\x18\x17'

运行结果:

加密数据:b'\x05,!=:;'

进程已结束,退出代码为 0

说明:对给定的字符串使用简单的异或加密算法进行加密。异或加密是一种对称加密方法,即加密和解密使用相同的算法和密钥。字符串"Python"被密钥0x55加密,结果是一个字节对象。

相关推荐

最强聚类模型,层次聚类 !!_层次聚类的优缺点

哈喽,我是小白~咱们今天聊聊层次聚类,这种聚类方法在后面的使用,也是非常频繁的~首先,聚类很好理解,聚类(Clustering)就是把一堆“东西”自动分组。这些“东西”可以是人、...

python决策树用于分类和回归问题实际应用案例

决策树(DecisionTrees)通过树状结构进行决策,在每个节点上根据特征进行分支。用于分类和回归问题。实际应用案例:预测一个顾客是否会流失。决策树是一种基于树状结构的机器学习算法,用于解决分类...

Python教程(四十五):推荐系统-个性化推荐算法

今日目标o理解推荐系统的基本概念和类型o掌握协同过滤算法(用户和物品)o学会基于内容的推荐方法o了解矩阵分解和深度学习推荐o掌握推荐系统评估和优化技术推荐系统概述推荐系统是信息过滤系统,用于...

简单学Python——NumPy库7——排序和去重

NumPy数组排序主要用sort方法,sort方法只能将数值按升充排列(可以用[::-1]的切片方式实现降序排序),并且不改变原数组。例如:importnumpyasnpa=np.array(...

PyTorch实战:TorchVision目标检测模型微调完

PyTorch实战:TorchVision目标检测模型微调完整教程一、什么是微调(Finetuning)?微调(Finetuning)是指在已经预训练好的模型基础上,使用自己的数据对模型进行进一步训练...

C4.5算法解释_简述c4.5算法的基本思想

C4.5算法是ID3算法的改进版,它在特征选择上采用了信息增益比来解决ID3算法对取值较多的特征有偏好的问题。C4.5算法也是一种用于决策树构建的算法,它同样基于信息熵的概念。C4.5算法的步骤如下:...

Python中的数据聚类及可视化分析实践

探索如何通过聚类分析揭露糖尿病预测数据集的特征!我们将运用Python的强力工具,深入挖掘数据,以直观的可视化揭示不同特征间的关系。一同探索聚类分析在糖尿病预测中的实践!所有这些可视化都可以通过数据操...

用Python来统计大乐透号码的概率分布

用Python来统计大乐透号码的概率分布,可以按照以下步骤进行:导入所需的库:使用Python中的numpy库生成数字序列,使用matplotlib库生成概率分布图。读取大乐透历史数据:从网络上找到大...

python:支持向量机监督学习算法用于二分类和多分类问题示例

监督学习-支持向量机(SVM)支持向量机(SupportVectorMachine,简称SVM)是一种常用的监督学习算法,用于解决分类和回归问题。SVM的目标是找到一个最优的超平面,将不同类别的...

25个例子学会Pandas Groupby 操作

groupby是Pandas在数据分析中最常用的函数之一。它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。如果我们有一个包含汽车品牌和价格信息的数据集,那么可以...

数据挖掘流程_数据挖掘流程主要有哪些步骤

数据挖掘流程1.了解需求,确认目标说一下几点思考方法:做什么?目的是什么?目标是什么?为什么要做?有什么价值和意义?如何去做?完整解决方案是什么?2.获取数据pandas读取数据pd.read.c...

使用Python寻找图像最常见的颜色_python 以图找图

如果我们知道图像或对象最常见的是哪种颜色,那么可以解决图像处理中的几个用例,例如在农业领域,我们可能需要确定水果的成熟度。我们可以简单地检查一下水果的颜色是否在预定的范围内,看看它是成熟的,腐烂的,还...

财务预算分析全网最佳实践:从每月分析到每天分析

原文链接如下:「链接」掌握本文的方法,你就掌握了企业预算精细化分析的能力,全网首发。数据模拟稍微有点问题,不要在意数据细节,先看下最终效果。在编制财务预算或业务预算的过程中,通常预算的所有数据都是按月...

常用数据工具去重方法_数据去重公式

在数据处理中,去除重复数据是确保数据质量和分析准确性的关键步骤。特别是在处理多列数据时,保留唯一值组合能够有效清理数据集,避免冗余信息对分析结果的干扰。不同的工具和编程语言提供了多种方法来实现多列去重...

Python教程(四十):PyTorch深度学习-动态计算图

今日目标o理解PyTorch的基本概念和动态计算图o掌握PyTorch张量操作和自动求导o学会构建神经网络模型o了解PyTorch的高级特性o掌握模型训练和部署PyTorch概述PyTorc...