java 位运算取8位_Python入门(9)运算符 — 位运算符、成员运算符、身份运算符...

本文介绍了Python中的位运算符,包括按位与、或、异或和取反,以及它们在二进制操作中的应用。此外,还详细讲解了成员运算符如'in'和'not in'用于检查元素是否存在于序列中。最后,讨论了身份运算符'is'和'is not',它们用于判断两个对象是否指向同一内存地址。文章强调了可变类型与不可变类型在内存管理上的区别,并提供了运算符优先级的指南。
摘要由CSDN通过智能技术生成
777f0e4c6bdbbf6ca112c6e6df4fcf81.gif 作者:猿人曰

在上一章中我们讲了算术运算符、比较运算符、赋值运算符、逻辑运算符。本章我们来讲:位运算符、成员运算符、身份运算符。

位运算符

位运算符是把数字变成二进制,一位一位的去进行运算。

 位运算符的使用 

以下假设 a = 77,b = 11

77 的二进制为:01001101

11 的二进制为:00001011

运算符描述使用
&

按位与运算符

1 & 1 = 1 

1 & 0 = 0

a & b = 9

(00001001)

|

按位或运算符

1 | 1 = 1 

1 | 0 = 1

0 | 0 = 1

a | b = 79

(01001111)

^

按位异或运算符

1 ^ 1 = 0

0 ^ 0 = 1

1 ^ 0 = 1

a ^ b = 70

(01000110)

~

按位取反,0 变 1 , 1 变 0

可以理解为~x = - x - 1

~ a = - 78

<<二进制各位全部左移若干位 "<

6 << 2 = 24

(00011000)

6 的二进制 00000110

>>二进制各位全部右移若干位 ">>" 右边的数为指定移动的位数,左边丢弃,右边补0

6 >> 2 = 1

(00000001)

6 的二进制 00000110

成员运算符

Python 还支持成员运算符,其中包括字符串、列表、元组

 成员运算符的使用 

以下假设 a = 1,b = 6,c = [1, 2, 3]

运算符描述使用
in判断某一元素是否在指定序列中,在返回 True,不在返回 False。

a in c , 返回 True

b in c , 返回 False

not in判断某一元素是否在指定序列中,在返回 False,不在返回 True。

a not in c , 返回 False

b not in c , 返回 True

身份运算符

身份运算符用来比较两个对象的存储单元

 身份运算符的使用 

运算符描述使用
isis 是判断两个标识符是不是引用同一个对象x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is notis not 是判断两个标识符是不是引用自不同对象x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

id ( ) 函数是用来查看对象的内存地址

 is 与 == 的区别 

is 用来判断两个变量所引用指向的对象是否为一个

== 用来判断两个引用变量的值是否相等

具体 is 、is not、== 的使用下见图:

(1.1)两个列表(is)比较

d5f7c35456bf11558e5f3aa3c4051ca3.png

(1.2)两个列表(is not)比较

11251fc1d7eff8417f01424f8b2ca95a.png

(1.3)两个列表(==)比较

7a95b4dc416ec6814fe79d761b55c244.png

(2.1)两个整数(is)比较

bb78d71f40aa94de2e67fd5e3116a856.png

(2.2)两个整数(is not)比较

c9aa3b2c1d17442655fd98cf07c8d9dc.png

(2.3)两个整数(==)比较

862e753e13d79b777e4dd12efc5319c3.png

由上面的图中可以看出一些问题,为什么 a 与 b 长得一模一样,列表的 id 却不相同,整数打印的 id 就相同?

因为在python中所有数字、字符串、list等,创建时会分配一个内存空间,我们的变量通过引用指向的方式来使用他们。

比如上图 a = 10 和 b = 10,他们输出的 id 一样,表示 a 和 b 都指向相同的内存地址,就是说引用了同一个不可变对象。但是 a = [1, 2, 3] 和 b = [1, 2, 3] ,他们输出的 id 不一样,a 和 b 指向的是不同的内存地址,就是说引用了不同的可变对象,并且各可变对象是相互独立,在内存中也有独立的内存地址。

 可变类型与不可变类型 

 可变类型 

可变类型有:列表(list)、字典(dict)、集合(set)

理解:可变类型是指对象的内存值可以被改变。当引用改变后,其实是所指的值直接发生改变,并没有复制行为,也没有开辟新的内存地址,通俗点说就是自我改变。

 不可变类型 

不可变类型有:整型(int)、元组(tuple)、字符串(str)、布尔(bool)

理解:不可变类型是指对象的内存值不可被改变。在 Python 中变量以引用的方式指向对象,如果变量引用了不可变对象,当该变量改变时,由于其所指对象的值不可被改变,相当于把原来的值复制一份后再改变,这时会开辟一个新的地址,变量也将指向这个新的地址,即变量引用了新的对象。

Python运算符优先级

以下运算顺序由高到低:

运算符介绍
( )小括号
**指数
~按位取反
*、/、//、%乘、除、取整、取余
+、-加、减
<>位移
&按位与运算符
^按位异或运算符
|按位或运算符
>、>=、比较运算符
==、!=等于、不等于
is、is not‍is 运算符
in、not in in 运算符
not‍
and
or

END

ec9a1d15b66d785fe6f6b0e17fa8ebe4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值