Skip to content

Latest commit

 

History

History
98 lines (75 loc) · 2.32 KB

7220-205644-000722 移位运算符.sy.md

File metadata and controls

98 lines (75 loc) · 2.32 KB
show version enable_checker
step
1.0
true

位运算符

回忆

  • 这次研究了位运算符
    • 按位或|
    • 按位异或^
    • 按位与&
  • 优先级与&最高,或|最低
  • 位运算还可以有其他运算符么?🤔
  • 如果有一定也在优先级的大列表中

查询

图片描述

  • 在位运算符紧挨着的地方
  • 有一个shifts
  • 是什么意思呢?

动手

图片描述

  • 1左移1位就变成了2
  • 1左移2位就变成了4
  • 1左移3位就变成了8
  • 这很好理解啊
  • 反过头来呢?

右移

图片描述

  • 最后都给移没有了
  • 意思大概明白了
  • 可是负数可以移位么?

负数

图片描述

  • 不但能移位
  • 还能支持大数运算
  • 不会溢出
  • 左移相当于乘以2
  • 右移相当于整除以2
  • 小数可以么?

小数

图片描述

  • 小数无论单精度还是双精度
  • 都是ieee754的编码规则
  • 连指数带有效数字一起移动没有意义
  • 那整数的话本来可以用乘以2、整除以2来做啊?
  • 移位运算符有什么意义呢?

意义

  • 明确寄存器位数
    • reg = 0xa1
    • 写成二进制10100001读起来挺麻烦
  • Reg = (1 << 7) + (1 << 5) + (1 << 0)
    • 这样就很明确
    • 7、5、0位置1

图片描述

历史

  • 在原来还没有乘法指令的时候
  • 使用移位来进行乘法运算
  • *3就是
    • <<1 乘以2 再加上自身
  • *6就是
    • <<2 乘以4 再加上 <<1 乘以2
  • *9就是
    • <<3 乘以8 再加上自身
  • 后来有了乘法指令
  • 但是如果希望用8位的乘法指令计算16位整数的乘法
  • 也需要把数字拆开完成计算

图片描述

总结

  • 这次研究了移位运算符
    • << 左移 相当于✖️2
    • << 右移 相当于➗️2
  • 我们从逻辑运算到位运算再到移位运算
  • 走了好远
  • 最后我们总结一下条件分支流程吧?🤔
  • 下次再说👋