Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0367
- 这是 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`
---- 上次了解的是
- bitwise 运算符
| 效果 | 英文 | 符号 | 操作数 |
|---|---|---|---|
| 按位与 | bitwise and | & | 2 |
| 按位或 | bitwise or | | | 2 |
| 按位非 | bitwise not | ~ | 1 |
| 按位异或 | bitwise exclusive or | ^ | 2 |
- 除了 非与或之外
- 还有什么其他的运算符吗??🤔
- 在位运算符紧挨着的地方
- 有一个 shifts
- 是什么意思呢?
- 数字 1 左移 1 位就变成了 2
- 数字 1 左移 2 位就变成了 4
- 数字 1 左移 3 位就变成了 8
- 为什么呢?
- 因为这是二进制
- 如果十进制的话
- 小数点向右移动 1 位
- 相当于数字左移 1 位
- 相当于乘以 10
- 现在是二进制的话
- 小数点向右移动 1 位
- 相当于数字左移 1 位
- 相当于乘以 2
- 同理
- 小数点向右移动 n 位
- 相当于数字左移 n 位
- 相当于乘以 2n
- 数字左移是这么理解的
- 反过头来呢?
- 最后都给移没有了
- 意思大概明白了
- 可是负数可以移位么?
- 不但能移位
- 还能支持大数运算
- 不会溢出
- 左移相当于乘以 2
- 右移相当于整除以 2
- 小数可以么?
- 小数无论单精度还是双精度
- 都是 ieee754 的编码规则
- 连指数带有效数字一起移动没有意义
- 那整数的话本来可以用乘以 2、整除以 2 来做啊?
- 移位运算符有什么意义呢?
- 明确寄存器具体位数是 0 还是 1
- reg = 0xa1
- 写成二进制 10100001 读起来挺麻烦
- Reg = (1 << 7) + (1 << 5) + (1 << 0)
- 这样就很明确
- 7、5、0 位置 1
- 其余的 6、4、3、2、1 位置置 0
- 在原来还没有乘法指令的时候
- 使用移位来进行乘法运算
- *3 就是
- <<1 左移 1 位
- 相当于乘以 2
- 再加上自身
- <<1 左移 1 位
- *6 就是
- <<2 左移 2 位
- 相当于乘以 4
- 再加上 <<1 左移 1 位
- 相当于加上自身乘以 2
- <<2 左移 2 位
- *9 就是
- <<3 左移 3 位
- 相当于乘以 8
- 再加上自身
- <<3 左移 3 位
- 后来有了乘法指令
- 但是如果希望用 8 位的乘法指令计算 16 位整数的乘法
- 也需要把数字拆开完成计算
- 今天 高级语言有移位运算符
- 最终转化为 cpu的移位指令
- 早年间是如何进行移位运算的呢?
- Harvard Mark 系列的
- 64-bit magnetic shift register
- 当时使用电磁铁作为基础元件
- 计算机被称为
- rely-based computer
- 继电器计算机
- 这次研究了移位运算符
<<左移 相当于 ✖️2>>右移 相当于 ➗️2
- 我们从逻辑运算到位运算再到移位运算
- 走了好远
- 最后我们总结一下条件分支流程吧?🤔
- 下次再说 👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。









