Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0288
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在:
个人网站: `https://oeasy.org`
蓝桥云课: `https://www.lanqiao.cn/courses/3584`
GitHub: `https://github.com/overmind1980/oeasy-python-tutorial`
Gitee: `https://gitee.com/overmind1980/oeasypython`
---- 上次了解了and 和 or的短路规则
- 从左到右 进行计算
- 如果 and左边是False
- and右边被短路
- 如果 or左边是True
- or右边被短路
- 这个规则被验证了一半
- 因为print("o")的返回值为False
- 找不到返回值为True而且有输出的函数...
- 除了 非与或之外
- 还有什么其他的运算符吗??🤔
help()
OPERATORS
- 找到OPERATEORS
- 运算符的帮助手册
- 往后翻
- 确实有 非逻辑布尔类型的
- 按位 与或非运算
- 不是 Boolean 运算
- 而是 Bitwise 运算
- BitWise 什么意思呢?
- bit 是二进制位
- wise 是智慧
- bitwise 是按二进制位进行的运算
- 具体研究一下
- & 按位与
- 0 & 0 = 0
- 0 & 1 = 0
- 1 & 0= 0
- 1 & 1= 1
- 3 & 5
- 即 00000011 & 00000101 = 00000001
- 所以 3 & 5 的值为 1
- 每一位都要进行与操作
- 操作的结果就是最终的结果
- 注意当 n1、n2 是不同的数字时...
- 注意 n1 = 123 时
- 对应二进制数 0b1111011
- 其实可以前面人为补零
- 但如果我想要自动把零补上呢?
- 这不是 撞枪口上 了么?
- 不过话说回来
- 为什么会有按位与这种操作呢?
- 有什么意义呢?
- 一个 cpu 除了运算之外
- 还有一些状态
- 比如
- 是否有进位标记
- 是否有溢出标记
- 奇偶性标记
- 就是一些标志位 Flag
-
数据 放在一个程序状态字(Program Status Word)里面
- 得到的是 整个状态字
- 但是 只需要某一位
-
怎么办呢?
- 8-bit的信息
- 存在1-byte中
- 想要 得到某个位的信息
- 我们用 0 把不相关的遮住了
- 就可以利用掩码(mask)
- 得到关于某1位的具体的值
- 然后观察到在这个字节中
- 这一位到底是 0 还是 1
- 这样就 可以 通过某一位设置好一个开关量
- 那么 按位或 有什么用呢?
- 参加运算的两个数只要两个数中的一个为 1
- 结果就为 1。
- 即
- 0 | 0 = 0
- 1 | 0 = 1
- 0 | 1 = 1
- 1 | 1 = 1
- 例:2 | 4 即
- 00000010 | 00000100 = 00000110
- 所以 2 | 4 的值为 6
- 回忆一下文件锁
- 独享 按位或上 非阻塞
- 得到了 非阻塞独享
- 与和或 有什么区别呢?
与和或是不同的规则0和1是不同的状态0可以在与操作中起到屏蔽的作用1可以在或操作中起到屏蔽的作用
- 也就是俗称的掩码 mask
- 与和或都有了
- 非在哪里呢?
- 按位取反
- 也称作“按位取非”或“求非”或“取反”
- 沈洁元译本译作“按位翻转”
- 是针对二进制数的操作
- 指将两个二进制数的每一二进位都进行取反操作
- 0 换成 1
- 1 换成 0
- 可以按照给出的公式记忆
- ~6 = -(x+1)= -7
- 他们加起来是-1
- 对应二进制形态所有位都是 1
- 可以具体举例么?
- 取反是对于每一个二进制位来说的
- 对于整个数字来说的话
- 就是逻辑非 not 而不是按位非 ~
- 异或是二元运算符
- 就是看这两位是不是不同
- 不同就是 1
- 相同就是 0
- 就是看这两位是不是不同
- 异或的英文是 XOR
- exclusive or
- or 的基础上把 and 去掉就是 xor
-
参加运算的两个数
- 如果两个相应位为“异”
- 值不同
- 则该位结果为 1
-
否则为 0
-
即
- 0 ^ 0 = 0
- 0 ^ 1 = 1
- 1 ^ 0 = 1
- 1 ^ 1 = 0
-
2 ^ 4
- 即 00000010 ^ 00000100 = 00000110
- 所以 2 ^ 4 的值为 6
-
按位异或有什么实际意义呢?
- 把某个字节与全1异或之后
- 就得到了这个字节按位取反的数值
- 通过按位或可以得到编程状态字的某位
- 如果结果是1的话,字节全1
- 如果结果是0的话,该位为0,其余为1
- 这个结果通过和全1按位异或
- 得到一个和原来结果按位求反的字节状态
- 概念都来自数字电路
- 不过在程序里面
- 也可以通过 位运算符 完成相应的计算
- 他们 都可以对应到 cpu 的指令
- 这次了解的是
- bitwise 运算符
| 效果 | 英文 | 符号 | 操作数 |
|---|---|---|---|
| 按位与 | bitwise and | & | 2 |
| 按位或 | bitwise or | | | 2 |
| 按位非 | bitwise not | ~ | 1 |
| 按位异或 | bitwise exclusive or | ^ | 2 |
- 除了 非与或之外
- 还有什么其他的运算符吗??🤔
- 下次再说 👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。



















