算术移位与逻辑移位有什么不同之处,最好能给出一个例子演示一下,

1个回答

  • (转自romway的博客,自己写这么多太累!)

    什么叫逻辑移位和算术移位

    1)算术移位 当乘数或除数是2n时,算术移位用来快速地完成对整数进行乘法或除法的运算.算数左移n位相当于乘上2n,执行方法是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补0.

    2)逻辑移位 逻辑左移n位的执行方法,是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补"0".逻辑右移n位的执行方法是把原来数中的每一位都向右移动n个位置,右面移出的低位丢弃不要,左面高位空出的位置上全部补0.

    逻辑移位:不考虑正负号

    算术移位:考虑正负号.

    e g:1000000000000000(右移2位) 0000000000000000(左移2位)

    逻辑移位:0010000000000000 0000000000000000

    算术移位:1110000000000000 1000000000000000

    注:算术右移时,最前面是1时,补1,否则,补0.逻辑左移时,补0.

    逻辑移位时,不用保留正负号(第一个),统一补0.

    逻辑移位(不管是左移位还是右移位) 都是空缺处补0

    例如:mov ax ,1100_0111_0110_1000B

    mov cl ,3

    shl ax ,cl ; 结果 ax = 0011_1011_0100_0000

    mov ax ,1100_0111_0110_1000B

    mov cl ,3

    shr ax ,cl ; 结果 ax = 0001_1000_1110_1101

    算术移位要保证符号位的不改变(算术左移位补0,算术右移位看符号位)

    例如:mov ax ,1100_0111_0110_1000B

    mov cl ,3

    sal ax ,cl ; 结果 ax = 0011_1011_0100_0000

    mov ax ,1100_0111_0110_1000B

    mov cl ,3

    sar ax ,cl ; 结果 ax = 1111_1000_1110_1101

    mov ax ,0100_0111_0110_1000B

    mov什么叫逻辑移位和算术移位

    2008-01-29 16:53:18| 分类:计算机软考 |字号 订阅

    1)算术移位 当乘数或除数是2n时,算术移位用来快速地完成对整数进行乘法或除法的运算.算数左移n位相当于乘上2n,执行方法是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补0.

    2)逻辑移位 逻辑左移n位的执行方法,是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补"0".逻辑右移n位的执行方法是把原来数中的每一位都向右移动n个位置,右面移出的低位丢弃不要,左面高位空出的位置上全部补0.

    逻辑移位:不考虑正负号

    算术移位:考虑正负号.

    e g:1000000000000000(右移2位) 0000000000000000(左移2位)

    逻辑移位:0010000000000000 0000000000000000

    算术移位:1110000000000000 1000000000000000

    注:算术右移时,最前面是1时,补1,否则,补0.逻辑左移时,补0.

    逻辑移位时,不用保留正负号(第一个),统一补0.

    逻辑移位(不管是左移位还是右移位) 都是空缺处补0

    例如:mov ax ,1100_0111_0110_1000B

    mov cl ,3

    shl ax ,cl ; 结果 ax = 0011_1011_0100_0000

    mov ax ,1100_0111_0110_1000B

    mov cl ,3

    shr ax ,cl ; 结果 ax = 0001_1000_1110_1101

    算术移位要保证符号位的不改变(算术左移位补0,算术右移位看符号位)

    例如:mov ax ,1100_0111_0110_1000B

    mov cl ,3

    sal ax ,cl ; 结果 ax = 0011_1011_0100_0000

    mov ax ,1100_0111_0110_1000B

    mov cl ,3

    sar ax ,cl ; 结果 ax = 1111_1000_1110_1101

    mov ax ,0100_0111_0110_1000B

    mov cl ,3

    sar ax ,cl ; 结果 ax = 0000_1000_1110_1101