当前位置: 首页 > 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.lryc.cn/news/598982.html

相关文章:

  • 人形机器人_双足行走动力学:Maxwell模型及在拟合肌腱特性中的应用
  • 深入解析Java微服务架构请求流程:Nginx到Nacos的完整旅程
  • 进阶系统策略
  • 人形机器人双足行走动力学:K-V模型其肌腱特性拟合中的应用
  • 模拟退火算法 (Simulated Annealing, SA)简介
  • 【推荐100个unity插件】Animator 的替代品?—— Animancer Pro插件的使用介绍
  • AD一张原理图分成多张原理图
  • 深入思考【九九八十一难】的意义,试用歌曲能否解释
  • python教程系列1--python001
  • 学习设计模式《十九》——享元模式
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-17,(知识点:PCB布线,传输线阻抗影响因素)
  • ParFlow 模型
  • 【自用】JavaSE--阶段测试
  • vite+vue3 工程-SVG图标配置使用指南——vite-plugin-svg-icons 插件
  • Vitest 用法详解及 Coverage Web 工具介绍
  • 工具篇之开发IDEA插件的实战分享
  • Nvidia Isaac Sim机械臂实验
  • Linux命令基础完结篇
  • Mysql大数据架构设计:当表中数据超过800万时,对数据表进行分表操作,以及分页查询优化详解
  • C++STL系列之set和map系列
  • Node.js 中的内置模板path
  • 【时时三省】(C语言基础)怎样定义和使用指向函数的指针变量
  • 北京-4年功能测试2年空窗-报培训班学测开-第五十九天-模拟面试前
  • io_uring:Linux异步I/O的革命性突破
  • Web前端开发:JavaScript reduce() 方法
  • 亚马逊云科技:以云为翼,助你翱翔数字新天空
  • 【高等数学】第五章 定积分——第三节 定积分的换元法和分部积分法
  • Zookeeper的分布式事务与原子性:深入解析与实践指南
  • 暑假集训篇之并发处理①练习题
  • C语言转义字符‘\\‘‘ 解析与常见误区