网站首页 > 技术文章 正文
导语: 在Python(或其他编程语言)中,位运算符直接操作数据的二进制位,效率极高。今天带你看懂按位与、按位或,以及神奇的移位运算——左移一位相当于乘2,右移一位相当于除2!代码实测验证!
一、 什么是位运算符?
位运算符直接对整数的二进制位进行操作。理解它,需要先将数据转换成二进制形式。
二、 按位与 (&):同为1,结果才为1
- 规则: 两个操作数的对应二进制位,如果都是1,则结果位为1;否则为0。
- 键盘符号: & (通常位于数字键7上方)
- 示例: 4 & 8
- 4 的二进制 (8位):0000 0100
- 8 的二进制 (8位):0000 1000
- 按位与运算:
0000 0100 (4)
0000 1000 (8)
---------- &
0000 0000 (0) // 对应位没有同时为1的情况
- 结果:0
- 代码验证:
print(4 & 8) # 输出: 0
三、 按位或 (|):有1则1,全0才0
- 规则: 两个操作数的对应二进制位,如果有1个是1,则结果位为1;只有全为0时,结果位才为0。
- 示例: 4 | 8
- 4 的二进制 (8位):0000 0100
- 8 的二进制 (8位):0000 1000
- 按位或运算:
0000 0100 (4)
0000 1000 (8)
---------- |
0000 1100 (12) // 第2、3位至少有一个是1
- 结果:12 (1100 二进制 = 8 + 4 = 12)
- 代码验证:
print(4 | 8) # 输出: 12
四、 移位运算:高效乘除的秘诀!
- 移位运算直接移动二进制位的位置,效率远高于普通乘除法。
- 左移位运算符 (<<):低位补0,相当于乘2
- 规则: 将数字的二进制表示向左移动指定的位数。移出的高位丢弃,低位用0填充。
- 效果: 每左移1位,相当于原数乘以2。
- 示例 (4 << 1):
- 4 的二进制 (8位):0000 0100
- 左移1位: 0000 1000 (高位0移出丢弃,低位补0)
- 结果:8 (1000 二进制 = 8) -> 4 * 2 = 8
- 示例 (4 << 2):
- 左移2位: 0001 0000 (移2位,低位补2个0)
- 结果:16 (10000 二进制 = 16) -> 4 * 4 = 16
- 代码验证:
print(4 << 1) # 输出: 8 (4 * 2)
print(4 << 2) # 输出: 16 (4 * 4)
- 右移位运算符 (>>):高位补0,相当于除2(向下取整)
- 规则: 将数字的二进制表示向右移动指定的位数。移出的低位丢弃,高位用0填充(对于正数)。
- 效果: 每右移1位,相当于原数除以2(向下取整)。
- 示例 (4 >> 1):
- 4 的二进制 (8位):0000 0100
- 右移1位: 0000 0010 (低位0移出丢弃,高位补0)
- 结果:2 (10 二进制 = 2) -> 4 / 2 = 2
- 示例 (4 >> 2):
- 右移2位: 0000 0001 (移2位,高位补2个0)
- 结果:1 (1 二进制 = 1) -> 4 / 4 = 1
- 代码验证:
print(4 >> 1) # 输出: 2 (4 / 2)
print(4 >> 2) # 输出: 1 (4 / 4)
总结:
- & (按位与): 同1则1。
- | (按位或): 有1则1。
- << (左移): a << n 等价于 a * (2 ** n),高效实现乘以2的n次方。
- >> (右移): a >> n 等价于 a // (2 ** n) (对于正数),高效实现除以2的n次方(向下取整)。
掌握位运算,尤其是高效的移位操作,能让你写出性能更优的Python代码!特别是在处理底层、算法优化或性能敏感场景时非常有用。快动手试试吧!
- 上一篇: Python短文,关于print函数的基础用法(一)
- 下一篇: Python运算符详解与示例
猜你喜欢
- 2025-08-05 python学习笔记 1.常见的数据类型
- 2025-08-05 从进阶语法到实战应用:Python中级修炼指南
- 2025-08-05 Python 面试问题:运算符
- 2025-08-05 Python解析库lxml与xpath用法总结
- 2025-08-05 Python从1到N整数求和的方法汇总
- 2025-08-05 Python语言从2.7到3.14的能力变化与演进逻辑
- 2025-08-05 第八章:Python异常处理
- 2025-08-05 72岁老翁学python编程(四)
- 2025-08-05 Python运算符探秘:掌握编程艺术的秘密武器
- 2025-08-05 用Python实现素数相关算法并做注释说明
- 08-06生产环境中使用的十大 Python 设计模式
- 08-06面试必备:Python内存管理机制(建议收藏)
- 08-06服务端开发面试必背——消息队列及它的主要用途和优点。附代码
- 08-06Python 栈:深度解析与应用
- 08-06Python中的多进程
- 08-06Python Logging 最佳实践
- 08-06Python并发数据结构实现原理
- 08-06用SendGrid和Redis队列用Python调度国际空间站的电子邮件
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)