位移运算
前提:下述的移位运算推理过程是建立在合理的移位运算基础上的,即移位运算的结果和实际运算结果一致
位移运算的数学意义
位移运算的规则
- 位移运算仅仅改变数值部分,符号位不变==(下述是有意义的位移运算)==
- 删除原则:右移,左添右省;左移,右添左省

- 0,0011010 作为正数,在可进行移位运算的前提下,最高位不为1,对于正数而言,1是有意义的数字,省去一,就省去了实际的数字。

- 对于-26的补码而言,1,,由原码取补码的原则是:符号位不变,数值部分全部取反,末位加一。所以左边有意义的是0,无意义的是1;右边有意义的是1,无意义的是0。 所以对于补码而言,右移,左边添1;左移,右边添0

- 对于-26的反码1,而言,由原码变成反码,是除符号位全部取反。所以对于数值部分,0表示1,1表示0。左移右边添1,右移左边添1

算术移位的硬件实现
- 正数原码,符号不变始终未0
- 左移,右边添0,最高位省去
- 右移,左边添0,该0可取自符号位的0,右边最低位省去
- 负数原码,符号不变始终未1
- 左移,右边添0,最高位省去
- 右移,左边添0,最低位省去
- 负数补码,符号不变始终未1

- 左移,右边添0,最高位省去
- 右移,左边添1,该1可取自符号位的1,右边最低位省去
- 负数反码,符号不变始终未1

- 左移,右边添1,最高位省去
- 右移,左边添1,该0可取自符号位的1,右边最低位省去
- 总结:根据上图可得,同样情况下丢1的意义不一样

算术移位和逻辑移位的区别
- 算术移位:计算机中的存储方式,最高位为符号位,除符号位仅仅移动数值位
- 逻辑移位:不存在符号位,所有的数都是数值部分,全部参与移位运算

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215969.html原文链接:https://javaforall.net
