# 04.操作符

> 了解一下一些常用的操作符

## 算数运算

算术运算符用于执行加、减、乘、除等数学运算

| 运算符  | 含义              | 示例       |
| ---- | --------------- | -------- |
| +    | 加法:两个操作数相加      | a+b=c    |
| -    | 减法:两个操作数相减      | a-b=c    |
| \*   | 乘法:两个操作数相乘      | a\*b=c   |
| /    | 除法:两个操作数相除      | a/b=c    |
| %    | 取模:返回两个操作数相除的余数 | a%b=c    |
| \*\* | 幂:返回x的y次幂       | a\*\*b=c |
| //   | 取整:返回除法时的整数部分   | a//b=c   |

实例:

```
C:\Users\tokimeki>python
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+2
3
>>> 1-2
-1
>>> 1*2
2
>>> 1/2
0.5
>>> 1%2
1
>>> 2**2
4
>>> 1//2
0
```

## 比较运算

| 运算符 | 含义                                                      | 示例                 |
| --- | ------------------------------------------------------- | ------------------ |
| ==  | 等于: 比较a,b对象是否相等                                         | (1 == 2) 返回 False。 |
| !=  | 不等于:比较两个对象a,b是否不相等                                      | (1 != 2) 返回 true.  |
| >   | 大于:返回a是否大于b                                             | (1 > 2) 返回 False。  |
| <   | 小于:返回a是否小于b。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。 | (1 < 2) 返回 true。   |
| >=  | 大于等于:返回a是否大于等于b。                                        | (1 >= 2) 返回 False。 |
| <=  | 小于等于:返回a是否小于等于b。                                        | (1 <= 2) 返回 true。  |

实例:

```
>>> 1==2
False
>>> 1!=2
True
>>> 1>2
False
>>> 1<2
True
>>> 1>=2
False
>>> 1<=2
True
```

## 赋值运算符

| 运算符   | 描述       | 实例                           |
| ----- | -------- | ---------------------------- |
| =     | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
| +=    | 加法赋值运算符  | c += a 等效于 c = c + a         |
| -=    | 减法赋值运算符  | c -= a 等效于 c = c - a         |
| \*=   | 乘法赋值运算符  | c \*= a 等效于 c = c \* a       |
| /=    | 除法赋值运算符  | c /= a 等效于 c = c / a         |
| %=    | 取模赋值运算符  | c %= a 等效于 c = c % a         |
| \*\*= | 幂赋值运算符   | c \*\*= a 等效于 c = c \*\* a   |
| //=   | 取整除赋值运算符 | c //= a 等效于 c = c // a       |

实例:

```
>>> a=1+2
>>> a
3
>>> a+=1  # a=a+1
>>> a
4
>>> a-=1  # a=a-1
>>> a
3
>>> a*=2  # a=a*2
>>> a
6
>>> a/=2  # a=a/2
>>> a
3.0
>>> a%=2  # a=a%3
>>> a
1.0 
>>> a**=2 # a=a**2
>>> a
1.0
>>> a//=2 # a=a//2
>>> a
0.0
```

## 位运算符

假设a为60，b为13

| 运算符 | 描述                                                 | 实例                                                 |
| --- | -------------------------------------------------- | -------------------------------------------------- |
| &   | 按位与运算符：参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0           | (a & b) 输出结果 12 ，二进制值： 0000 1100                   |
| \|  | 按位或运算符：只要对应的二个二进位有一个为1时，结果位就为1。                    | (a \| b) 输出结果 61 ，二进制值： 0011 1101                  |
| ^   | 按位异或运算符：当两对应的二进位相异时，结果为1                           | (a ^ b) 输出结果 49 ，二进制解释： 0011 0001                  |
| \~  | 按位取反运算符：对数据的每个二进制位取反,即把1变为0,把0变为1。\~x类似于-x-1       | (\~a ) 输出结果 -61 ，二进制值： 1100 0011， 在一个有符号二进制数的补码形式。 |
| <<  | 左移动运算符：运算数的各二进位全部左移若干位，由"<<"右边的数指定移动的位数，高位丢弃，低位补0。 | a << 2 输出结果 240 ，二进制值： 1111 0000                   |
| >>  | 右移动运算符：把">>"左边的运算数的各二进位全部右移若干位，">>"右边的数指定移动的位数     | a >> 2 输出结果 15 ，二进制值： 0000 1111                    |

实例:

```
a = 60            # 60 = 0011 1100 
b = 13            # 13 = 0000 1101 
c = 0

c = a & b;        # 12 = 0000 1100
print ("1 - c 的值为：", c)

c = a | b;        # 61 = 0011 1101 
print ("2 - c 的值为：", c)

c = a ^ b;        # 49 = 0011 0001
print ("3 - c 的值为：", c)

c = ~a;           # -61 = 1100 0011
print ("4 - c 的值为：", c)

c = a << 2;       # 240 = 1111 0000
print ("5 - c 的值为：", c)

c = a >> 2;       # 15 = 0000 1111
print ("6 - c 的值为：", c)



--------------------------------------------------


1 - c 的值为： 12
2 - c 的值为： 61
3 - c 的值为： 49
4 - c 的值为： -61
5 - c 的值为： 240
6 - c 的值为： 15
```

## 逻辑运算

Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:

| 运算符 | 逻辑表达式   | 描述                                                   | 实例                    |
| --- | ------- | ---------------------------------------------------- | --------------------- |
| and | x and y | 布尔"与" - 如果 x 为 False，x and y 返回 False，否则它返回 y 的计算值。  | (1 and 20) 返回 20。     |
| or  | x or y  | 布尔"或" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。           | (10 or 1) 返回 10。      |
| not | not x   | 布尔"非" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。 | not(1 and 2) 返回 False |

实例:

```
>>> 20 and 1
1
>>> 1 and 20
20
>>> 10 or 1
10
>>> 1 or 10
1
>>> not (1 and 2)
False
```

> 温馨提示
>
> and 运算符：如果有多个操作数都为真，只返回值为最后一个真值
>
> or 运算符:如果有多个操作数，有真值，只返回第一个真值

## 成员运算符

| 运算符    | 描述                                | 实例                                 |
| ------ | --------------------------------- | ---------------------------------- |
| in     | 如果在指定的序列中找到值返回 True，否则返回 False。   | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。   |
| not in | 如果在指定的序列中没有找到值返回 True，否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |

实例:

```
>>> a = [1,2,3,4]
>>> a
[1, 2, 3, 4]
>>> b = 2
>>> c = 5
>>> b in a
True
>>> c in a
False
```

## 身份运算符

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

> 温馨提示
>
> 身份运算符用于比较两个对象的存储单元

实例:

```
>>> a=10
>>> b=20
>>> a is b
False
>>> a is not b
True
```

> 温馨提示
>
> 注意is 与 == 区别：
>
> is 用于判断两个变量引用对象是否为同一个， == 用于判断引用变量的值是否相等

## 运算符优先级

表格列出了从最高到最低优先级的所有运算符：

| 运算符                         | 描述                                |
| --------------------------- | --------------------------------- |
| \*\*                        | 指数 (最高优先级)                        |
| \~ + -                      | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
| \* / % //                   | 乘，除，取模和取整除                        |
| + -                         | 加法减法                              |
| >><<                        | 右移，左移运算符                          |
| &                           | 位 'AND'                           |
| ^ \|                        | 位运算符                              |
| <= <>>=                     | 比较运算符                             |
| <> == !=                    | 等于运算符                             |
| = %= /= //= -= += \*= \*\*= | 赋值运算符                             |
| is is not                   | 身份运算符                             |
| in not in                   | 成员运算符                             |
| and or not                  | 逻辑运算符                             |

实例:

```
>>> a = 1
>>> b = 2
>>> c = 3
>>> e=a+b*c
>>> e
7
>>> e=(a+b)*c
>>> e
9
```
