算术移位与逻辑移位有什么区别?

问题描述:

算术移位与逻辑移位有什么区别?

逻辑移位(不管是左移位还是右移位) 都是空缺处补0\x0d例如:mov ax ,1100_0111_0110_1000Bmov cl ,3shl ax ,cl ; 结果 ax = 0011_1011_0100_0000\x0dmov ax ,1100_0111_0110_1000Bmov cl ,3shr ax ,cl ; 结果 ax = 0001_1000_1110_1101\x0d算术移位要保证符号位的不改变(逻辑左移位补0,逻辑右移位看符号位)\x0d例如:mov ax ,1100_0111_0110_1000Bmov cl ,3sal ax ,cl ; 结果 ax = 0011_1011_0100_0000\x0dmov ax ,1100_0111_0110_1000Bmov cl ,3sar ax ,cl ; 结果 ax = 1111_1000_1110_1101\x0dmov ax ,0100_0111_0110_1000Bmov cl ,3sar ax ,cl ; 结果 ax = 0000_1000_1110_1101\x0d可以总结如下:算术左移同逻辑左移\x0d算术右移移入的位用符号位填