移位运是一个较为重要的知识点,本文讲解的是二进制的 算数移位、逻辑移位、循环移位主要框图如下
一、算数移位
有符号数
的移位称为算数移位,在移位过程中符号位保持不变,仅对数值位进行移位
1.原码的算数移位
右移:高位补0,低位舍弃。若舍的弃位=0,相当于÷2;若舍弃的位≠0,则会丢失精度
左移:低位补0,高位舍弃。若舍的弃位=0,相当于×2;若舍弃的位≠0,则会出现严重的误差
2.反码的算数移位
正数反码———正数反码与原码相同,因此对正数反码的移位运算也和源码的相同
右移:高位补0,低位舍弃。
左移:低位补0,高位舍弃。
负数反码———负数反码数值位与原码相反,对负数反码的移位运算规律如下
右移:高位补1,低位舍弃。若舍的弃位=1,相当于÷2;若舍弃的位≠1,则会丢失精度
左移:低位补1,高位舍弃。若舍的弃位=1,相当于×2;若舍弃的位≠1,则会出现严重的误差
3.补码的算数移位
正数补码———正数补码与原码相同,因此对正数补码的移位运算也和源码的相同
右移:高位补0,低位舍弃。
左移:低位补0,高位舍弃。
负数补码———最右边的1及其右边同原码,最右边左边的1同反码
右移(同反码):高位补1,低位舍弃。 若舍的弃位=0,相当于÷2;若舍弃的位≠0,则会丢失精度
左移(同原码):低位补0,高位舍弃。若舍的弃位=1,相当于×2;若舍弃的位≠1,则会出现严重的误差
4.注意
左移相当于×2;右移相当于÷2
由于位数有限,因此有时候无法用算数位精确地等效乘除法
二、逻辑移位
逻辑移位将操作数视为无符号数
移位规则
逻辑左移:高位移出,低位添0
逻辑右移:低位移出,高位添0