本文共 756 字,大约阅读时间需要 2 分钟。
位移运算
前提:下述的移位运算推理过程是建立在合理的移位运算基础上的,即移位运算的结果和实际运算结果一致
位移运算的数学意义
位移运算,相当于小数点的移动,对数值进行扩大或者缩小进制数倍
左移运算,小数点右移,扩大
右移运算,小数点左移,缩小
位移运算的规则
- 位移运算仅仅改变数值部分,符号位不变==(下述是有意义的位移运算)==
- 删除原则:右移,左添右省;左移,右添左省
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200314121054538.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JsYWNrb3V0ZHJhZ29u,size_16,color_FFFFFF,t_70)
- 0,0011010 作为正数,在可进行移位运算的前提下,最高位不为1,对于正数而言,1是有意义的数字,省去一,就省去了实际的数字。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200314121316863.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JsYWNrb3V0ZHJhZ29u,size_16,color_FFFFFF,t_70)
- 对于-26的补码而言,1,1100110,由原码取补码的原则是:符号位不变,数值部分全部取反,末位加一。所以左边有意义的是0,无意义的是1;右边有意义的是1,无意义的是0。 所以对于补码而言,右移,左边添1;左移,右边添0
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200314121823659.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JsYWNrb3V0ZHJhZ29u,size_16,color_FFFFFF,t_70)
- 对于-26的反码1,1100101而言,由原码变成反码,是除符号位全部取反。所以对于数值部分,0表示1,1表示0。左移右边添1,右移左边添1
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200314122019472.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JsYWNrb3V0ZHJhZ29u,size_16,color_FFFFFF,t_70)
算术移位的硬件实现
-
正数原码,符号不变始终未0
- 左移,右边添0,最高位省去
- 右移,左边添0,该0可取自符号位的0,右边最低位省去
-
负数原码,符号不变始终未1
- 左移,右边添0,最高位省去
- 右移,左边添0,最低位省去
- 负数补码,符号不变始终未1
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200314122415996.png)
- 左移,右边添0,最高位省去
- 右移,左边添1,该1可取自符号位的1,右边最低位省去
- 负数反码,符号不变始终未1
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200314122439207.png)
- 左移,右边添1,最高位省去
- 右移,左边添1,该0可取自符号位的1,右边最低位省去
- 总结:根据上图可得,同样情况下丢1的意义不一样
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200314122548198.png)
算术移位和逻辑移位的区别
- 算术移位:计算机中的存储方式,最高位为符号位,除符号位仅仅移动数值位
- 逻辑移位:不存在符号位,所有的数都是数值部分,全部参与移位运算
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200314122823954.png)
转载地址:http://thgpb.baihongyu.com/