# 三. 运算、数据及逻辑

## 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
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://books.innohub.top/pyinfo/part3.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
