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

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

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


任务要求

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加密,结果是一个字节对象。

相关推荐

Python 最常用的语句、函数有哪些?

1.#coding=utf-8①代码中有中文字符,最好在代码前面加#coding=utf-8②pycharm不加可能不会报错,但是代码最终是会放到服务器上,放到服务器上的时候运行可能会报错。③...

PyYAML 实用的使用技巧

作者:Reorx’sForge中文版:https://reorx.com/blog/python-yaml-tips-zh英文版:Tipsthatmaysaveyoufromthehe...

学习编程第127天 python中字符串与数值中的巧妙应用

今天学习的刘金玉老师零基础Python教程第10期,主要内容是python中字符串与数值中的巧妙应用。一、新建一个工程如图,新建一个工程。二、字符串与数值的区别变量只有为数值的时候,才能进行数学运算。...

Python 必学!12 个 “开挂级” 内置函数深度解析(小白也能秒懂)

干货来了以下是Python中12个强大内置函数的深度解析,涵盖数据处理、代码优化和高级场景,助你写出更简洁高效的代码:一、数据处理三剑客1.map(function,iterable)作用:...

Python浮点数保留两位小数的方法

技术背景在Python编程中,经常会遇到需要将浮点数保留特定小数位数的情况,比如在处理货币、统计数据等场景。然而,由于浮点数在计算机中采用二进制表示,存在精度问题,导致直接使用round函数有时无法得...

DAY4-step5 Python示例说明 round()函数

Round()Round()是python提供的内置函数。它将返回一个浮点数,该浮点数将四舍五入到指定的精度。如果未指定要舍入的小数位,则将其视为0,并将舍入到最接近的整数。语法:round(flo...

第五个测试版本了,iOS 9 又有了什么变化?

今天的早些时候苹果发布了iOS9beta5,除去修复BUG和提升系统的稳定性外,苹果还带来了一些新功能。本次更新包括了对Carplay,WiFi以及Siri等功能的优化,Mac...

如何在 Python 中随机排列列表元素

在本教程中,我们将学习在Python中如何打乱列表元素顺序,随机排列列表元素。如何随机排列列表是一项非常有用的技能。它在开发需要选择随机结果游戏中非常有用。它还适用于数据相关的工作中,可能需要提取...

Python获取随机数方法汇总

1.random.random()作用:随机生成一个[0,1)之间的浮点数importrandomprint(f'随机生成一个[0,1)之间的浮点数={random.random()}&...

Python程序开发之简单小程序实例(11)小游戏-跳动的小球

Python程序开发之简单小程序实例(11)小游戏-跳动的小球一、项目功能用户控制挡板来阻挡跳动的小球。二、项目分析根据项目功能自定义两个类,一个用于控制小球在窗体中的运动,一个用于接收用户按下左右键...

Keras人工智能神经网络 Regressor 回归 神经网络搭建

前期分享了使用tensorflow来进行神经网络的回归,tensorflow构建神经网络本期我们来使用Keras来搭建一个简单的神经网络Keras神经网络可以用来模拟回归问题(regression)...

我让DeepSeek写程序,有懂的看看写的对不对?

他写的时候就像教学生解方程一样,解释一段写一段,因为中间太长,我就截了最后的结果,应该是手机版本复制字数有限,可能也没复制全,有没有懂的看看写的对不对?下面是他写的最后结果。importrandom...

Picker Wheel 线上随机抽签轮盘

#头条创作挑战赛#办公室经常会碰到「中午要吃什么?」、「要订哪家饮料店?」或「谁要去帮大家跑腿?」等各种情境,为了公平起见,我们可以使用随机方式进行抽签,这样一来就能确保公平公正性,其他人也就不...

思维链COT原理探究

TEXTANDPATTERNS:FOREFFECTIVECHAINOFTHOUGHTITTAKESTWOTOTANGO测试模型:PaLM-62B,GPT3,CODEXCOT元素...

永别了iPod!系列产品回顾,你用过几款?

中关村在线消息:就在本周,苹果官方宣布iPod系列将不再生产新品,现货售完即止。作为一个偏向音乐播放的系列,iPod系列想必陪伴了很多朋友的学生年代。近日有外媒总结了iPod系列的全部产品,来看看你用...