逻辑移位与算术移位

逻辑移位与算术移位

1.逻辑移位
不论是左移还是右移都是直接补0,所有位参与移位。

2.算术移位
与逻辑移位的区别在于符号位不参与移位。当为双符号位时,只有最高符号位才是真符号位,低符号位会参与移位,而如果移位后为01或10,则说明溢出。如补码1,010 0000左移一位后为1,100 0000。

当机器数为正时:
无论左移、右移,原码、补码、反码均补0。
当机器数为负时:
1)原码:由于除符号位外,数值位与真值相同,所以移位时只要保证符号位不变,其余均补0。
2)反码:由于反码是原码各位取反,所以无论左移还是右移都是补1。
3)补码:由于补码除最后一位与原码相同,其他位都是与原码相反,所以左移后最低位补0,右移后最高位补1。

移位后的影响:
1.机器数为正
如果左移,此时如果最高位为1丢掉,则值会出现错误;如果右移,最低位此时如果为1被丢掉,只会影响精度。
2.机器数为负
1)原码和机器数为正的时候一样。
2)反码:左移,如果此时最高位为0,对应的原码是1,则会出错。右移,如果此时最低位为0,只会影响精度。
3)补码:左移,如果此时最高位为0,对应的原码是1,则会出错。右移,如果此时最低位为1(最低位与原码相同),只会影响精度。

发布了17 篇原创文章 · 获赞 0 · 访问量 124

猜你喜欢

转载自blog.csdn.net/weixin_45486992/article/details/104717210