单片机移位操作右移为什么最高位保持原数最低位移出
移位操作的含义
移位运算符是位操作运算符的一种。移位运算符在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为:>右移、>>(带符号右移)和
需要特别注意的是,移位运算是按照二进制数字进行操作的。
例如对于十进制数89进行移位操作的话,需要先把十进制数89转化为二进制数1000 1001,然后才能进行移位运算。
算术右移和逻辑右移
我们知道,在实际生活中,整数有正有负,所以在进行移位操作的时候,正整数和负整数的移位操作是不同的。
1、逻辑右移
逻辑右移就是不考虑符号位,右移一位,左边补零即可。
2、算术右移
算术右移需要考虑符号位,右移一位,若符号位为1,就在左边补1,;否则,就补0。
所以算术右移也可以进行有符号位的除法,右移,n位就等于除2的n次方。
举个例子来说明一下。
还用上面说的十进制数正89,它的二进制数为1000 1001.
对于正整数89来说,右移一位后变成 (0)100 0100 (1).其中左边的0,是移位时补的0,最右边括号中的1,是经过移位操作后,移出去的那一位。这就是逻辑右移
对于二进制数89,如果它是有符号数,那它表示的十进制数就不是89了,而是-9.对它进行右移一位的操作后,变成 (1)100 0100 (1)。这就是算术右移。