跳转至

移位运算

算术移位

原码的算术移位: 符号位不变,数值位进行移位。 向右移位相当于 / 2, 高位补0地位舍弃,如果舍弃的位!=0, 则会精度丢失; 左移相当于 *2的效果,地位补领,高位舍弃,如果舍弃的位!=0,则会造成严重的误差。

补码的算术移位: 符号位不动,数值位右移,正数右移补0,负数右移补1 (符号位是啥就补啥)

逻辑移位

逻辑左移: 低位补0高位舍弃 逻辑右移: 高位补0地位舍弃

可以看成是对”无符号数“的算术移位


逻辑移位应用举例

循环移位

  • 不带进位: 用移除的位补上空缺,循环左移, 最高位的位补上最低位的位,循环右移,最低位的位补上最高位的位
  • 带进位位: 移除的位放到进位位,进位位的元素补上空缺


循环移位应用

字符的大小端存储转换,如汉字的大小端存储的转换,循环移位一个字节,8位,就能实现高低字节的调换。

注意

由于原/反补码位数有限,因此某些时候算术移位不能精确等效乘法,除法

冀ICP备17031746号-6