-
算数移位
原码的算数移位:
符号位保持不变,仅对数值位进行移位
a)右移:高位补0低位舍弃。若舍弃的位=0,则相当于÷2,若舍弃的位≠0,则会丢失精度。
b)左移:低位补0高位舍弃。若舍弃的位=0,则相当于×2,若舍弃的位≠0,则会出现严重误差。
反码的算数移位:
a) 正数的反码的移位与原码相同,用0补充。
b) 负数的反码:右移是高位补1,低位舍弃;左移是低位补1,高位舍弃。
补码的算数移位:
a) 正数的补码的移位与原码相同,用0补充。
b) 负数的补码:右移(同反码),高位补1,低位舍弃;左移(同原码):低位补0,高位舍弃。
总结:左移相当于 × 2,右移相当于 ÷ 2;由于位数有限,因此有时候无法用算数移位精确地等效乘除法。
-
逻辑移位
a) 右移:高位补0,低位舍弃。
b) 左移:低位补0,高位舍弃。
总结:可以看作是对“无符号数”的算数移位。
-
循环移位
a)不带进位位(小循环):用移除的位补上空缺。
b)带进位位(大循环):移除的位放到进位位,原进位位补上空缺。
总结:适用用来将数据的低字节数据和高字节数据互换。
定点数移位运算
最新推荐文章于 2024-07-22 16:24:23 发布