Python3自动化运维 - 03 运算表达式

算术表达式

加减乘除(+ - * /)

>>> 1 + 1
2
>>> 5 - 2
3
>>> 5 * 2
10
>>> 5 / 2
2.5
# 除法Python3中是默认向浮点数靠拢

取整运算(//)

>>> 5 // 2
2

>>> -5 // 2
-3
# 注意://取整运算结果是向“最小的整数”靠拢

取余运算(%)

>>> 5 % 2
1

幂值运算(**)

>>> 2 ** 10
1024
>>> 2 ** 2
4

逻辑表达式

not

>>> a = True
>>> b = 0
>>> not b
True
>>> not a
False
>>> 
>>> mylist = []
>>> not mylist
True
# mylist为空本身是一个假

and

>>> a
True
>>> b
0
>>> a and b
0
# 真真为真 真假为假 假假为假

or

>>> a or b
True
# 真假为真 真真为真 假假为假

is

>>> a = 1
>>> b = 1
>>> a is b
True

>>> mylist = [1,2,3,4]
>>> mylist1 = [1,2,3,4]
>>> mylist is mylist1
False

>>> mylist[0] is mylist1[0]
True

>>> id(mylist)
140613557719560
>>> id(mylist1)
140613557692424

>>> id(mylist[0])
9330880
>>> id(mylist1[0])
9330880

>>> mytuple = (1,2,3,4)
>>> mytuple1 = (1,2,3,4)
>>> mytuple is mytuple1
False
# 根据地址来判断,相同地址才会被认为是同一个对象,a is b True -> a和b是同一个对象

is not

>>> mylist = [1,2,3,4]
>>> mylist1 = [1,2,3,4]
>>> mylist is not mylist1
True

关系表达式

等于(==)

>>> mylist   
[1, 2, 3, 4]
>>> mylist1
[1, 2, 3, 4]
>>> mylist == mylist1
True
>>> 1 == 1
True
>>> 'abc' == 'abc'
True
# 判断数据元素是否相等

不等于(!=)

>>> 2 != 1
True
# <>不等于已经废弃了

大于(>)、小于(<)、大于等于(>=)、小于等于(<=)

>>> 10 > 2
True
>>> 'a' > 'b'
False
>>> 'A' > 'a'
False
# ASCII  A -> 65  a -> 97
>
>> ord('a')
97
# 查看ascii码,只能一个字符

>>> 'abc' > 'abd'
False

>>> 'baa' < 'abb'
False
# 字符串判断大小,逐位比较,如果第一位两个比较可以得出结果,那么后面的也不会继续比较了

>>> a >= b
False
>>> a <= b
True

位运算

数据在内存中都是二进制, A a -> 数字 -> 二进制

原码、反码、补码

正数 1
原码 0000 0001 二进制最高位不是用来表示具体数字的,是用来表示符号位的
反码 0000 0001 正数的反码是其本身
补码 0000 0001 正数的补码是其本身 补码是真正存储在计算机中的

负数 -1
原码 1000 0001 二进制最高位不是用来表示具体数字的,是用来表示符号位的
反码 1111 1110 负数的反码是符号位不变,其余各位取反
补码 1111 1111 负数的补码是反码加一 补码是真正存储在计算机中的

0000 0000 八位的数 最大能是多少(考虑符号的话) 0 ~ 127

0000 0000 | 0000 0000 | 0000 0000| 0000 0000 | 0000 0000 | 0000 0000 | 0000 0000| 0000 0000 |
不考虑符号: 最高位64 最大值是(2 ** 64 - 1)
考虑符号: 最高位64 最大值是(2 ** 63 - 1)

按位取反(~)

>>> ~1
-2

>>> ~-1
0

>>> ~-2
1

# 1的补码   0000 0001
# 按位取反  1111 1110    -> 原码
# 反码      1000 0001
# 补码      1000 0010

# -1的补码  1111 1111
# 按位取反  0000 0000    -> 原码
# 反码      0000 0000
# 补码      0000 0000

# -2的补码  1111 1110
# 按位取反  0000 0001    -> 原码
# 反码      0000 0001       
# 补码      0000 0001

# 按位取反公式
>>> ~a == -(a+1)
True

# 128  64  32  16  8  4  2  1

左移n位 (<<)

>>> a = 1
>>> a << 2
4

# 0000 0001 补码
# 0000 0100 左移2位  -> 4

# 0000          0000
# 128 64 32 16  8 4 2 1

右移n位 (>>)

>>> a = 16
>>> a >> 2
4
# 0001 0000 补码
# 0000 0100 右移2位  -> 4

按位与 (&)

>>> a = 1
>>> b = -1
>>> a & b
1
# 0000 0001 1的补码
# 1111 1111 -1的补码
# 0000 0001 按位与 -> 1

按位或 (|)

>>> a = 1
>>> b = -1
>>> a | b
-1

# 0000 0001 1的补码
# 1111 1111 -1的补码
# 1111 1111 按位或 -> -1

按位异或 (^)

>>> a = 1
>>> b = -1
>>> a ^ b
-2
# 0000 0001 1的补码
# 1111 1111 -1的补码
# 1111 1110 按位异或(相同为0,不同为1),负数原码:补码-1 -> 按拉取反
# 1111 1101 补码-1
# 1000 0010 按位取反  -> -2
文章目录
  1. 1. 算术表达式
    1. 1.1. 加减乘除(+ - * /)
    2. 1.2. 取整运算(//)
    3. 1.3. 取余运算(%)
    4. 1.4. 幂值运算(**)
  2. 2. 逻辑表达式
    1. 2.1. not
    2. 2.2. and
    3. 2.3. or
    4. 2.4. is
    5. 2.5. is not
  3. 3. 关系表达式
    1. 3.1. 等于(==)
    2. 3.2. 不等于(!=)
    3. 3.3. 大于(>)、小于(<)、大于等于(>=)、小于等于(<=)
  4. 4. 位运算
    1. 4.1. 原码、反码、补码
    2. 4.2. 按位取反(~)
    3. 4.3. 左移n位 (<<)
    4. 4.4. 右移n位 (>>)
    5. 4.5. 按位与 (&)
    6. 4.6. 按位或 (|)
    7. 4.7. 按位异或 (^)