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时设计的移位运算也是针对补码进行的,所以网上的说法是没错的。在考试做题时要分清是原码,补码,反码,负数对这三种机器数的算术移位操作是不同的,尽管实际设计硬件只实现了补码的算术移位。个人建议按正数和负数分别记忆。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐