当前位置: 首页 > news >正文

Python 程序设计讲义(15):Python 的数据运算——位运算

Python 程序设计讲义(15):Python 的数据运算——位运算

目录

  • Python 程序设计讲义(15):Python 的数据运算——位运算
    • 一、位逻辑运算
        • 1、位与运算
        • 2、位或运算
        • 3、位异或运算
        • 4、取反运算
    • 二、移位运算
        • 1、左移位运算
        • 2、右移位运算

程序中的所有数据都是以二进制的形式存储的。位运算是指直接按照数值的二进制形式进行运算。位运算包括位逻辑运算与移位运算。

一、位逻辑运算

位逻辑运算是指对二进制数的每一位进行数值运算。Python 的位逻辑运算包括:位与运算、位或运算、位异或运算和取反运算。

1、位与运算

位与运算用符号 &表示,将两个二进制数的每一位进行运算。如果相同位的数都为 1,则对应的结果位也为 1,若有一个不为 1,则对应的结果位为 0。运算时,如果两个二进制数位数不同,则再较短的二进制左边补 0。

例如:

a=0b1101
b=0b1010
print(a&b,bin(a&b))
a=12 #二进制为:1100
b=6  #二进制为:0110
print(a&b,bin(a&b))运算结果为:
8 0b1000
4 0b100
2、位或运算

位或运算用符号 |表示,将两个二进制数的每一位进行运算。如果相同位的数有一个为 1 或两个都为 1,则对应的结果位也为 1,如果两个都 0,则对应的结果位为 0。运算时,如果两个二进制数位数不同,则再较短的二进制左边补 0。

例如:

a=0b1101
b=0b1010
print(a|b,bin(a|b))
a=12 #二进制为:1100
b=6  #二进制为:0110
print(a|b,bin(a|b))运算结果为:
15 0b1111
14 0b1110
3、位异或运算

位异或运算用符号 ^表示,将两个二进制数的每一位进行运算。如果相同位的数不相同,则对应的结果位为 1,如果相同位的数相同,则对应的结果位为 0。运算时,如果两个二进制数位数不同,则再较短的二进制左边补 0。

例如:

a=0b1101
b=0b1010
print(a^b,bin(a^b))
a=12 #二进制为:1100
b=6  #二进制为:0110
print(a^b,bin(a^b))运算结果为:
7 0b111
10 0b1010
4、取反运算

取反运算用符号 ~表示,对二进制数进行取反操作。取反运算首先将二进制数加 1,然后取其负值。

例如:

a=0b1101
b=5 #二进制为:101
print(~a,bin(~a))
print(~b,bin(~b))运算结果为:
-14 -0b1110
-6 -0b110

二、移位运算

移位运算包含左移位和右移位。

1、左移位运算

左移位运算使用符号<<表示。将二进制数整体向左移动指定的位数。

格式如下:

0bxx<<n
说明:0bxx表示一个二进制数,n表示将该二进制数向左移动n位。

左移位运算用于增大数值,向左移动 1 位,则二进制数的值变为原来的 2 倍,向左移动 2 位,则则二进制数的值变为原来的 4 倍,以此类推。

例如:

a=0b1101  #十进制数13
b=5 #二进制为:101
print(a<<2,bin(a<<2))  #a变为原来的4倍
print(b<<1,bin(b<<1))  #b变为原来的2倍运算结果为:
52 0b110100
10 0b1010
2、右移位运算

右移位运算使用符号>>表示。将二进制数整体向右移动指定的位数。

格式如下:

0bxx>>n
说明:0bxx表示一个二进制数,n表示将该二进制数向右移动n位。

右移位运算用于减小数值,向右移动 1 位,则二进制数的值变为原来的二分之一(取整),向右移动 2 位,则则二进制数的值变为原来的四分之一(取整),以此类推。

例如:

a=0b1101  #十进制数13
b=5 #二进制为:101
print(a>>2,bin(a>>2))  #a变为0011
print(b>>1,bin(b>>1))  #b变为010运算结果为:
3 0b11
2 0b10
http://www.dtcms.com/a/295849.html

相关文章:

  • Opentrons 模块化平台与AI技术助力智能移液创新,赋能AAW™自动化工作站
  • 深入探索Amazon SQS:构建弹性微服务与无服务器应用的秘密武器
  • 如何在Ubuntu系统下创建桌面快捷方式
  • Vue 3 项目性能优化指南
  • rk3588开发板使用硬件编码处理视频
  • 如何在 Windows 上安装 MongoDB 及常见问题
  • AI总结视频以及谷歌浏览器插件安装步骤
  • RAGFlow:检索增强生成技术的高效实现与深度探索
  • Day02_C++编程
  • 基于U-Net的结冰检测系统实现
  • C11补充
  • SGLang + 分布式推理部署DeepSeek671B满血版
  • 数据结构-5(二叉树)
  • pytorch-geometric包(torch_scatter、torch_sparse、torch_cluster)
  • 服务器带宽具体是指什么意思?
  • PyTorch中神经网络的模型构建
  • 钉钉DingTalk完整版下载离线安装包2025
  • 【小董谈前端】【样式】 CSS与样式库:从实现工具到设计思维的跨越
  • ThinkPHP8集成RabbitMQ的完整案例实现
  • C# 方法执行超时策略
  • [Python] -进阶理解5- Python 模块与包的导入机制解析
  • uniapp中mp-html使用方法
  • 特定日志输出aop实现
  • day62-可观测性建设-全链路监控zabbix+grafana
  • Redis的事务和Lua之间的区别
  • day13 flash
  • 「iOS」黑魔法——方法交换
  • 告别束缚:这款“隐形心电监测仪”让心脏健康管理更自由
  • JavaSE:开发环境的搭建(Eclipse)
  • 企业级数据分析创新实战:基于表格交互与智能分析的双引擎架构