请简述逻辑位移与算法位移的区别
逻辑位移(Logical Shift)
逻辑位移通常用于无符号整数。在逻辑位移中,所有的位都向左或向右移动指定的位数,空出的位置用0填充。逻辑位移通常用于快速乘以或除以2的幂次方。
- 左逻辑位移:将二进制数的所有位向左移动指定的位数,最右边的位被丢弃,最左边空出的位置用0填充。
- 右逻辑位移:将二进制数的所有位向右移动指定的位数,最左边的位被丢弃,最右边空出的位置用0填充。
算术位移(Arithmetic Shift)
算术位移用于有符号整数。在算术位移中,符号位(最左边的位)被保留,其余位向左或向右移动指定的位数。算术位移通常用于快速乘以或除以2的幂次方,同时保持数的符号不变。
-
左算术位移:与逻辑左位移相同,所有位向左移动,最右边的位被丢弃,最左边空出的位置用0填充。
-
右算术位移:与逻辑右位移不同,符号位(最左边的位)被保留,其余位向右移动。对于正数,最左边的位是0,所以空出的位置用0填充;对于负数,最左边的位是1,所以空出的位置用1填充。