算术移位和逻辑移位
·
1.逻辑移位
逻辑移位是对无符号数进行的,左移和右移都是补零
例如:0101
左移1位:1010
右移1位:0010
2.算术移位
算术移位是对有符号数进行的,符号位不变,对数值位进行移动。移位的规则如下:
真值 | 码制 | 移动方式 |
正数 | 原码,反码,补码 | 左移和右移都加0 |
负数 | 原码 | 左移和右移都加0 |
负数 | 补码 | 左移加0 |
负数 | 补码 | 右移加1 |
负数 | 反码 | 左移和右移都加1 |
例如:
正数 0,0110(+6)
左移1位:0,1100
左移2位:0,1000
右移1位:0,0011
右移2位:0,0001
负数 1,0110(-6原码)
左移1位:1,1100
左移2位:1,1000
右移1位:1,0011
右移2位:1,0001
负数 1,1010(-6补码)
左移1位:1,0100
左移2位:1,1000
右移1位:1,1101
右移2位:1,1110
负数 1,1001(-6反码)
左移1位:1,0011
左移2位:1,0111
右移1位:1,1100
右移2位:1,1110
3.对网上其他说法的说明
网上说逻辑左移和算术左移一样都是低位补零,逻辑右移高位补0,算术右移高位补和符号位一样的数字,这种说法是针对补码而言的。实际上由于计算机中所有数字都是以补码的形式存在,在设计cpu时设计的移位运算也是针对补码进行的,所以网上的说法是没错的。在考试做题时要分清是原码,补码,反码,负数对这三种机器数的算术移位操作是不同的,尽管实际设计硬件只实现了补码的算术移位。个人建议按正数和负数分别记忆。
更多推荐
所有评论(0)