写在前面:
deadline果然是第一生产力,训练营碰上组会+结课报告+党日活动,booooom
回到正题,今天的学习内容是:变量、运算符与数据类型+位运算
需要注意的点:
1.算术运算符
3 // 4 = 0
#整除
3 % 4 = 3
#取余
2.is, is not和==, !=
a = ["hello"]
b = ["hello"]
print(a is b, a == b) # False True
print(a is not b, a != b) # True False
- is, is not 对比的是两个变量的内存地址
- ==, != 对比的是两个变量的值
- 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
- 对比的两个变量,指向的是地址可变的类型(list,dict等),则两者是有区别的。
3.运算符的优先级
- 一元运算符优于二元运算符。例如
3 ** -2
等价于3 ** (-2)
。 - 先算术运算,后移位运算,最后位运算。例如
1 << 3 + 2 & 7
等价于(1 << (3 + 2)) & 7
。 - 逻辑运算最后结合。例如
3 < 4 and 4 < 5
等价于(3 < 4) and (4 < 5)
。
4.python中各种数据类型之间的相互转化:目标类型(变量)
int(x [,base ]) 将x转换为一个整数
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串
5.重头!!!位运算(基于二进制)
按位与(&):两位同时为“1”,结果才为“1”,否则为0;
特殊用途:
-
清零:与一个各位都为零的数值相与,结果为零。
-
取一个数的指定位:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”
设X=10101110,取X的低4位,用 X & 0000 1111 = 0000 1110
按位或(|):只要有一个为1,其值为1。
特殊用途:
对一个数据的某些位,置1:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或
将X=10100000的低4位置1 , X | 0000 1111 = 1010 1111
异或(^):两个相应位值不同,则结果为1,否则为0。与0相异或,保留原值 ,与1相异或,翻转 。
取反(~):对一个二进制数按位取反,0变1,1变0
特殊用途:一个数的最低位为零,可以表示为:a&~1。(取反运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高)
左移(<<):将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
右移(>>):将一个运算对象的各二进制位全部右移若干位(右边的二进制位丢弃,正数左补0,负数左补1)
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
每右移一位,相当于该数除以2。
复合赋值运算符:位运算符与赋值运算符结合,组成新的复合赋值运算符,它们是:
&= 例:a &= b 相当于a=a & b
|= 例:a |= b 相当于a=a | b
>>= 例:a >>= b 相当于a=a >> b
<<= 例:a <<= b 相当于a=a << b
^= 例:a ^= b 相当于a=a ^ b
运算规则:和前面讲的复合赋值运算符的运算规则相似。
如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。
Too much for today,see you soon
参考文献:
https://blog.csdn.net/Marccco/article/details/88709481
https://github.com/datawhalechina/team-learning-program/tree/master/Python-Language