运算表达式
算数表达式
- 基本运算符:+ - * /
- Python2.x : 除法结果只会向复杂数据类型靠拢,两个整数相除,是否除净结果都为整数。
- Python3.x : 除法中无论有无复杂数据类型,结果都将精确到浮点数
- 其他算数的结果类型取决于运算数字之中最复杂的类型
#python2.x
>>> 5 / 3 #2中两整数做除法,结果还是整数
1 #结果为整数
>>> 5 / 3.0
1.6666666666666667 #只有在参与运算的数据类型中含有浮点数,结果才会成为浮点数
#python3.x
>>> 5 / 3
1.6666666666666667 #3中两整数做除法,结果会精确到浮点数
>>> 5 / 3.0
1.6666666666666667
-
特殊运算符:
- // 向下取整运算(地板除)
- % 取余运算
- ** 幂值运算
>>> 5 // 3
1
>>> 5 % 3
2
>>> 5 ** 3
125
除此之外,我们还可以使用round函数来控制返回结果的精度
>>> round(5 / 3) #可以获取到5/3的四舍五入结果
2
>>> round(5 / 3, 2) #控制返回结果的精度为2
1.67
逻辑表达式
| 表达式 | 解释 | 返回值类型 |
|---|---|---|
| not a | a的逻辑非 | bool |
| a and b | a和b的逻辑与 | bool |
| a or b | a和b的逻辑或 | bool |
| a is b | a和b是同一个对象 | bool |
| a is not b | a和b不是同一个对象 | bool |
与 : 真真为真, 真假为假, 假假为假 或 : 真真为真, 真假为真, 假假为假 非 : 真为假,假为真
>>> a = 1
>>> not a #a的逻辑非
False
>>> b = 0
>>> a and b #a和b的逻辑与
0
>>> a or b #a和b的逻辑或
1
is逻辑语句判断的是否为同一个对象,首先需要值相同,其次数据地址相同
>>> a1 = [1,2,3,4,5]
>>> a2 = [1,2,3,4,5]
>>> a1 is a2 #a1和a2值虽相同,但并不是同一个数据对象
False
>>> id(a1)
2298768048584
>>> id(a2) #两数据地址并不相同
2298768048392
关系表达式
| 表达式 | 解释 | 返回值类型 |
|---|---|---|
| a == b | a,b是否值相等 | bool |
| a != b | a,b是否值不等 | bool |
| a > b | a是否大于b | bool |
| a < b | a是否小于b | bool |
| a >= b | a是否大于等于b | bool |
| a <= b | a是否小于等于b | bool |
>>> a = 1
>>> b = 2
>>> a == b
False
>>> a != b
True
>>> a > b
False
>>> a < b
True
>>> a <= b
True
>>> a >= b
False
位运算
| 表达式 | 解释 | 实际操作 | |
|---|---|---|---|
| ~a | 按位取反 | -(a+1) | |
| a << n | 左移n位 | - | |
| a >> n | 右移n位 | - | |
| a & b | a和b按位与 | 11>1 00>0 01>0 | |
| a | b | a和b按位或 | 11>1 00>0 01>1 |
| a ^ b | a和b按位异或 | 01>1 11>0 00>0 |
二进制
计算机中真正存储的二进制为补码;位运算都是补码在进行运算 正数的原码,反码,补码都是其本身
| 类型 | +1 | -1 | 负数求码规则 |
|---|---|---|---|
| 原码 | 0000 0001 | 1000 0001 | 第一位为符号位 |
| 反码 | 0000 0001 | 1111 1110 | 符号位不变,其余各位取反 |
| 补码 | 0000 0001 | 1111 1111 | 反码加一 |
这里举一个小例子 :
>>> a = 1
>>> ~a
-2
结果解释:
首先位运算都是补码在进行运算
1的补码为 : 0000 0001
首先按位取反的结果 : 0000 0001 > 1111 1110
1111 1110 为补码,对其求原码
将该补码看作原码,重新求出的补码即可
1111 1110 原码
1000 0001 反码 (最高位为1,为负数求码过程,符号伪不变,其余各位取反)
1000 0010 补码 (反码加一)
此时我们得到的1000 0010 则是-2的原码,所以~a的结果为-2
位运算小例子
实现两个变量值的替换 如 a = 1 , b = 2 ; 替换后结果为 a = 2 , b = 1;不允许出现第三个变量
#a: 0000 0001 1
#b: 0000 0010 2
>>> a = 1
>>> b = 2
>>> a = a | b #按位或
#a: 0000 0011 3
#b: 0000 0010 2
>>> b = a ^ b #按位异或
#a: 0000 0011 3
#b: 0000 0001 1
>>> a = a ^ b #按位异或
#a: 0000 0010 2
#b: 0000 0001 1
>>> a
2
>>> b
1