Python基础-运算表达式

运算表达式


算数表达式


  • 基本运算符+ – * /
  • Python2.x : 除法结果只会向复杂数据类型靠拢,两个整数相除,是否除净结果都为整数
  • Python3.x : 除法中无论有无复杂数据类型,结果都将精确到浮点数
  • 其他算数的结果类型取决于运算数字之中最复杂的类型
1
2
3
4
5
#python2.x
>>> 5 / 3 #2中两整数做除法,结果还是整数
1 #结果为整数
>>> 5 / 3.0
1.6666666666666667 #只有在参与运算的数据类型中含有浮点数,结果才会成为浮点数
1
2
3
4
5
#python3.x
>>> 5 / 3
1.6666666666666667 #3中两整数做除法,结果会精确到浮点数
>>> 5 / 3.0
1.6666666666666667

  • 特殊运算符
    • // 向下取整运算(地板除)
    • % 取余运算
    • ** 幂值运算
1
2
3
4
5
6
>>> 5 // 3
1
>>> 5 % 3
2
>>> 5 ** 3
125

除此之外,我们还可以使用round函数来控制返回结果的精度

1
2
3
4
>>> round(5 / 3) #可以获取到5/3的四舍五入结果
3
>>> 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

: 真真为真, 真假为假, 假假为假
: 真真为真, 真假为真, 假假为假
: 真为假,假为真

1
2
3
4
5
6
7
8
>>> a = 1
>>> not a #a的逻辑非
False
>>> b = 0
>>> a and b #a和b的逻辑与
0
>>> a or b #a和b的逻辑或
1

is逻辑语句判断的是否为同一个对象,

  • 首先需要值相同
  • 其次数据地址相同
    1
    2
    3
    4
    5
    6
    7
    8
    >>> 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> 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 反码加一

这里举一个小例子 :

1
2
3
>>> 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
不允许出现第三个变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注