> For the complete documentation index, see [llms.txt](https://books.innohub.top/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.innohub.top/pyinfo/part3.md).

# 三. 运算、数据及逻辑

## 1.算数运算符

​ 变量a为10，变量b为21：

| 运算符  | 描述                         | 实例                |
| ---- | -------------------------- | ----------------- |
| +    | 两个对象相加                     | a+b = 31          |
| -    | 得到负数或者减去另一个数               | a-b = -11         |
| \*   | 两个字相乘得到的返回值，或者是一个序列重复若干次输出 | a\*b = 210        |
| /    | 除法运算，默认得到浮点结果，注意格式化输出      | b/a = 2.1         |
| %    | 取模运算                       | b%a = 1           |
| \*\* | 返回x的y次幂u                   | a\*\*b 结果为10的21次幂 |
| //   | 整除，返回商的整数部分                | a//b = 2          |

**对应的赋值运算符：**

| 运算符   | 描述       | 实例                           |
| ----- | -------- | ---------------------------- |
| =     | 简单的赋值运算符 | 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       |

```python
a = 21
b = 10
c = 0

c = a + b
print ("1 - c 的值为：", c)

c += a
print ("2 - c 的值为：", c)

c *= a
print ("3 - c 的值为：", c)

c /= a 
print ("4 - c 的值为：", c)

c = 2
c %= a
print ("5 - c 的值为：", c)

c **= a
print ("6 - c 的值为：", c)

c //= a
print ("7 - c 的值为：", c)
```

> 输出结果：
>
> ```
> 1 - c 的值为： 31
> 2 - c 的值为： 52
> 3 - c 的值为： 1092
> 4 - c 的值为： 52.0
> 5 - c 的值为： 2
> 6 - c 的值为： 2097152
> 7 - c 的值为： 99864
> ```

## 2.python的位运算符

```
     python的位运算符是把数字当做二进制数来运算的，数字可以以任一进制输入，但是进行位运算时以二进制形式。注意默认输出是以十进制形式，进行输出时，可以采用以下函数：
bin()    采用二进制
oct()    八进制
hex()    十六进制


输入时：
2 进制是以 0b 开头的: 例如: 0b11 则表示十进制的 3
8 进制是以 0o 开头的: 例如: 0o11 则表示十进制的 9
16 进制是以 0x 开头的: 例如: 0x11 则表示十进制的 17
```

| 运算符 | 描述                                                                |
| --- | ----------------------------------------------------------------- |
| &   | <p>按位与运算符：<br>           参与运算的两个值每一位进行“与运算”，得到结果以二进制表示\</br ></p> |
| \|  | <p>按位或运算符：<br>           每一位进行逻辑或运算，即二个位置中有1即为1</p>               |
| ^   | <p>按位异或逻辑符：<br>           对应位置不同时结果相应位置为1</p>                     |
| \~  | <p>按位取反逻辑符：<br>           对数据的每个位二进制位取反，\~x 类似于 -x-1</p>          |
| <<  | <p>左移逻辑符：<br>           进行左移操作，右边参数为左移位数，每左移一位，数值扩大二倍</p>         |
| >>  | <p>右移逻辑运算符：<br>           进行右移操作，每右移一位，原数值相当于缩小一半</p>             |

## 3.逻辑运算符、成员及身份运算符

### 1）逻辑运算符

```
    逻辑运算符包括 and or not
    运算规则如下：
        x and y:
            if x==false   return false;
            else    return y;
        x or y:
            if x==true    return x;
            else    return y;
        not x:
            return -x
```

**注意：**

x和y可以是字符串对象或者数字，其中0和“”为假，其他为真。逻辑运算符可以连接多个对象，则and返回值为第一个为假的值，若所有只为真则返回最后一个值；or返回第一个为真的的值，所有值为假则返回最后一值，即逻辑运算需要遍历参加运算的每一个对象

### 2）成员运算符

```
in:    若在指定序列中找到该值则返回True  否则返回False
not in：与in作用相反
```

### 3）身份运算符

```
is：判断两个标识符是否是同一对象的引用，是则返回True
not is：---
函数id() 用于获取对象的内存地址，is 的用法x is y与id(x) == id(y)方式等价

is与==的区别：
    is用于判断是否是同一对象的不同引用，而==用于比较对象的值是否相等

python具有intern机制在交互式环境中，会有一个小整数池对象，将[-5,256]这些整数对象，提前分配好空间，所有位于这个范围的引用公用一个对象，所以会出现：
    a = 7; b = 7
    (a is b) == True
```
