python运算符详解(二)

简介: python运算符详解(二)

python运算符详解(一):https://developer.aliyun.com/article/1495699?spm=a2c6h.13148508.setting.14.163c4f0efRHJQa

(7)位运算符: & | ^ << >> ~

Python 位运算按照数据在内存中的二进制位(Bit)进行操作,它一般用于底层开发(算法设计、驱动、图像处理、单片机等),在应用层开发(Web 开发、Linux 运维等)中并不常见

存储和计算时,都用补码进行操作

var1 = 19
var2 = 15

# & 按位与
& 按位与运算符
按位与运算符&的运算规则是:只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0。例如1&1为 1,0&0为 0,1&0也为 0,这和逻辑运算符&&非常类似。
计算方法,先将数字转换成二进制的补码,用补码进行按位与运算,符号位参与运算,之后将补码转换成原码显示

res = var1 & var2
"""
000 ... 10011
000 ... 01111
000 ... 00011 => 3
"""
print(res)

# | 按位或
| 按位或运算符
按位或运算符|的运算规则是:两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。例如1|1为 1,0|0为0,1|0 为1,这和逻辑运算中的||非常类似。

res = var1 | var2
"""
000 ... 10011
000 ... 01111
000 ... 11111
"""
print(res)

# ^ 按位异或
"""两个值不相同=>True 反之返回False"""
^按位异或运算符
按位异或运算^的运算规则是:参与运算的两个二进制位不同时,结果为 1,相同时结果为 0。例如0^1为 1,0^0为 0,1^1为 0。

res = var1 ^ var2
"""
000 ... 10011
000 ... 01111
000 ... 11100
"""
print(res)

#<< 左移 (相当于乘法)

<<左移运算符
Python 左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补 0。
例如,9<<3可以转换为如下的运算:
<< 0000 0000 – 0000 0000 – 0000 0000 – 0000 1001 (9 在内存中的存储)
0000 0000 – 0000 0000 – 0000 0000 – 0100 1000 (72 在内存中的存储)
所以9<<3的结果为 72。

又如,(-9)<<3可以转换为如下的运算:
<< 1111 1111 – 1111 1111 – 1111 1111 – 1111 0111 (-9 在内存中的存储)
1111 1111 – 1111 1111 – 1111 1111 – 1011 1000 (-72 在内存中的存储)
所以(-9)<<3的结果为 -72



如果数据较小,被丢弃的高位不包含 1,那么左移 n 位相当于乘以 2 的 n 次方。 -9 * 2**3 = -72



"""5乘以2的n次幂"""
res = 5 << 1 # 10
res = 5 << 2 # 20
res = 5 << 3 # 40
print(res)

“”"

000 … 101 => 5

000 … 1010 => 10

000 …10100 => 20

000 .101000 => 40

“”"

#>> 右移 (相当于除法)

右移运算符

Python 右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1。

例如,9>>3可以转换为如下的运算:

0000 0000 – 0000 0000 – 0000 0000 – 0000 1001 (9 在内存中的存储)

0000 0000 – 0000 0000 – 0000 0000 – 0000 0001 (1 在内存中的存储)

所以9>>3的结果为 1。

又如,(-9)>>3可以转换为如下的运算:

1111 1111 – 1111 1111 – 1111 1111 – 1111 0111 (-9 在内存中的存储)

1111 1111 – 1111 1111 – 1111 1111 – 1111 1110 (-2 在内存中的存储)

所以(-9)>>3的结果为 -2

如果被丢弃的低位不包含 1,那么右移 n 位相当于除以 2 的 n 次方(但被移除的位中经常会包含 1)。

“”“5地板除2的n次幂”“”

res = 5 >> 1 # 2

res = 5 >> 2 # 1

res = 5 >> 3 # 0

“”"

000 … 101

000 … 010 => 2

000 … 001 => 1

000 … 000 => 0

“”"

print(res)

#~ 按位非 (针对于补码进行操作,按位取反,包含每一位)

~按位取反运算符

按位取反运算符为单目运算符(只有一个操作数),右结合性,作用是对参与运算的二进制位取反。例如1为0,~0为1,这和逻辑运算中的!非常类似。

""" -(n+1) """
# res = ~22
res = ~19
print(res)
"""
原码:000 ... 10011
反码:000 ... 10011
补码:000 ... 10011

补码:   000 ... 10011
按位非: 111 ... 01100

给你补码->原码
补码:111 ... 01100
反码:100 ... 10011
原码:100 ... 10100 => -20
"""

res = ~-19
print(res)
"""
原码:100 ... 10011
反码:111 ... 01100
补码:111 ... 01101

补码:   111 ... 01101
按位非: 000 ... 10010

给你补码->原码 (因为是正数 ,原反补相同)
000 ... 10010 => 18
"""

总结:

个别运算符:

运算符优先级最高的: **

运算符优先级最低的: =

()可以提升优先级

一元运算符 > 二元运算符 (优先级)

一元运算符 : 同一时间,操作一个值 ~ -

二元运算符 : 同一时间,操作两个值 + - * / …

同一种类运算符:

算数运算符 : 乘除 > 加减

逻辑运算符 : () > not > and > or

位运算符 : ( << >> ) > & > ^ > |

整体排序:

算数运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符 >赋值

赋值运算符用来做收尾

算位比身成逻

res = 5+5 << 6 // 3 is 40 and False

Python 3.8(或更高)下:

出现报错

SyntaxWarning: "is" with a literal. Did you mean "=="?
1
解决方法:
将对应语句中is/is not用== 和 != 代替

原因:

从 python 3.8 开始,使用 is 和 is not 运算符时,会抛出 SyntaxWarning 语句警告信息

“”"

res = 10 << 2 is 40 and False

res = 40 is 40 and False

res = True and False

res = False

“”"

print(res)

优先级不是每个人都要熟记于心,为了便于新人理解,可用括号提升下优先级,这样就看起来比较直白

res = (5+5) << (6//3) is 40 and False

相关文章
|
5月前
|
人工智能 Python
Python 中的 `and`, `or`, `not` 运算符
本文介绍了 Python 中的逻辑运算符 `and`、`or` 和 `not` 的基本用法及其特性。这些运算符主要用于布尔运算,特别是在条件判断和循环中非常有用。文章详细解释了每个运算符的功能,例如 `and` 检查所有表达式是否为真,`or` 检查是否有任意一个表达式为真,`not` 用于取反。此外,还提到这些运算符支持短路特性,并可应用于非布尔值场景。掌握这些运算符有助于编写更高效、简洁的代码。
385 11
|
8月前
|
知识图谱 Python
Python入门:4.Python中的运算符
Python是一间强大而且便捷的编程语言,支持多种类型的运算符。在Python中,运算符被分为算术运算符、赋值运算符、复合赋值运算符、比较运算符和逻辑运算符等。本文将从基础到进阶进行分析,并通过一个综合案例展示其实际应用。
|
12月前
|
Python
【10月更文挑战第7天】「Mac上学Python 14」基础篇8 - 运算符详解
本篇将详细介绍Python中的运算符,包括数学运算、关系运算、逻辑运算、赋值运算和成员运算等内容。同时会说明运算符的优先级和运算顺序,帮助用户理解和掌握Python中的运算符使用规则。
137 3
【10月更文挑战第7天】「Mac上学Python 14」基础篇8 - 运算符详解
|
11月前
|
Python
Python运算符优先级
Python运算符优先级。
109 2
|
11月前
|
Python
Python成员运算符
Python成员运算符
103 2
|
11月前
|
Python
Python赋值运算符
Python赋值运算符。
99 2
|
11月前
|
Python
Python比较运算符
Python比较运算符。
116 2
|
11月前
|
Python
Python身份运算符
Python身份运算符。
96 1
|
12月前
|
自然语言处理 Python
【python从入门到精通】-- 第三战:输入输出 运算符
【python从入门到精通】-- 第三战:输入输出 运算符
167 0
【python从入门到精通】-- 第三战:输入输出 运算符
|
12月前
|
存储 Java 编译器
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
这篇文章是关于Python编程语言中变量命名规则、基本数据类型、算数运算符、比较运算符、逻辑运算符、赋值运算符以及格式化输出与输入的详细教程。
210 0
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。

热门文章

最新文章

  • 1
    Python零基础爬取东方财富网股票行情数据指南
    46
  • 2
    解析Python爬虫中的Cookies和Session管理
    48
  • 3
    Python日志模块配置:从print到logging的优雅升级指南
    39
  • 4
    【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
    40
  • 5
    (Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
    44
  • 6
    (Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
    72
  • 7
    (numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
    42
  • 8
    (numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
    62
  • 9
    (Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
    32
  • 10
    (Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
    54
  • 推荐镜像

    更多