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

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.xdnf.cn/news/16338.html

相关文章:

  • Unity VS Unreal Engine ,“电影像游戏的时代” 新手如何抉择引擎?(1)
  • 读书笔记(黄帝内经)
  • 使用Python采集招聘网站数据并智能分析求职信息
  • P1013 [NOIP 1998 提高组] 进制位
  • ESP32S3 Ubuntu vscode如何使用USB-JTAG调试
  • java中如何返回一个可以执行返回操作(return action)的函数或对象
  • 【自用】JavaSE--阶段测试
  • 基于深度学习的胸部 X 光图像肺炎分类系统(二)
  • 学习设计模式《十九》——享元模式
  • ICCV 2025 | CWNet: Causal Wavelet Network for Low-Light Image Enhancement
  • 主要分布在背侧海马体(dHPC)CA1区域(dCA1)的位置细胞对NLP中的深层语义分析的积极影响和启示
  • LeetCode|Day24|383. 赎金信|Python刷题笔记
  • 【Oracle】Oracle权限迷宫破解指南:2步定位视图依赖与授权关系
  • QML WorkerScript
  • 高版本Android跨应用广播通信实例
  • MBPO 算法:让智能体像人一样 “先模拟后实操”—强化学习(17)
  • Linux进程间通信:管道机制全方位解读
  • 卫星物联网:使用兼容 Arduino 的全新 Iridium Certus 9704 开发套件深入探索
  • 如何判断钱包的合约签名是否安全?
  • MySQL基础02
  • 常见半导体的介电常数
  • 【ROS1】09-ROS通信机制——参数服务器
  • 接口多态之我的误解
  • 高可用架构模式——异地多活设计步骤
  • k8s之ingress定义https访问方式
  • 精通Python PDF裁剪:从入门到专业的三重境界
  • Vue工程化 ElementPlus
  • 分布式推客系统开发全解:微服务拆分、佣金结算与风控设计
  • 强制缓存与协商缓存
  • 如何衡量测试的有效性?(如缺陷发现率、逃逸率等)