算术移位(实现乘法、除法——本质是小数点前移、后移)
原码的算数移位
定点整数
右移:高位补0,低位舍弃(若舍弃的位=0,相当于÷2,若舍弃位≠0,则会丢失精度)
左移:低位补0,高位舍弃(若舍弃的位=0,相当于×2,若舍弃位≠0,则会严重误差)
定点小数(同定点整数)
反码的算术移位
正数的反码算术移位和原码相同
负数的反码算数移位和原码相反(反码是原码取反,反码中的1就是原码中的0)
右移:高位补1,低位舍弃(若舍弃的位=0,相当于÷2,若舍弃位≠0,则会丢失精度)
左移:低位补1,高位舍弃(若舍弃的位=0,相当于×2,若舍弃位≠0,则会严重误差)
补码的算数移位
正数的补码算数移位和原码相同
负数的补码算数移位
右移:同反码算数移位,高位补1(空出来的是反码的高位),低位舍弃
左移:同原码算数移位,低位补0(空出来的是原码的低位),高位舍弃
逻辑移位(无符号数的算数移位 )
逻辑右移:高位补0,低位舍弃
逻辑左移:低位补0,高位舍弃
循环移位 (调换数据中的高低字节,大小端存储转换)
循环左移:最高位补充最低位的空位
循环右移:最低位补充最高位的空位
带进位位的循环移位(机器字长有限,进位会丢失)
带进位位的循环移位:移出的位放到CF(进位 / 错位标志),原来CF中存放的位补上空缺位
不带进位位的循环移位
用移出的位补上空缺的位