一. 算数移位
1.1 定义
算数移位,如985.211移动到9852.11,及改变小数点的位置。
即改变各数码位的位权,可以用移位算法实现乘法和除法
二.原码的移位
2.1 源码算数右移
思想
高位补0,低位舍弃,如果低位舍弃的是0,那么相当于➗2,如果低位舍弃的为1那么会丢失精度
2.2 源码算数左移
算数左移:低位补0,高位如果是0,则相当于×2;如果高位不是0,那么会出现严重偏差
总结
三.反码的移位
3.1反码的正数移位
因为反码的正数等于源码的正数,所以正数的反码和源码相同
左移:高位补0,低位舍弃
右移:低位补0,高位舍弃
3.2 反码的负数移位
由于反码和源码的区别是,当原码为负数时,除了符号位全部取反
所以负数反码的移位:
右移:高位补1,低位舍弃
左移:低位补1,高位舍弃
四. 补码的移位
4.1 正数的补码移位
正数的补码和原码一样,所以补码的移位与源码的移位一样
4.2 负数补码的移位
注意:补码和反码的区别是:补码是反码的末位+1的结果,所以如果反码的末尾有1再+1的话会有进位,直到出现第一个0为止。所以补码的倒数第一个0之后与原码,0之前和反码一样
所以负数补码移位的思想:
左移(同原码):低位补0,高位舍弃。左移相当于✖2
右移(同反码):高位补1,低位舍弃.。右移相当于➗2
总结
五.逻辑移位(无符号数的算数移位)
5.1 思想 :
逻辑左移:低位补0,高位舍弃
逻辑右移:高位补0,低位舍弃
六.循环移位
是一个循环补位的过程
6.1 普通循环左移
6.2 带进位位的循环左移
在有些计算会导致超过8bit的进位,那么可以用一个进位位来存放来自低位的进位