移位

来源:互联网 发布:树大招风知乎 编辑:程序博客网 时间:2024/05/08 05:51

1.汇编语言中的逻辑右移(SHR)是将各位依次右移指定位数,然后在左侧补0,算术右移(SAR)是将各位依次右移指定位数,然后在左侧用原符号位补齐。
2.高级语言右移运算符(>>)是将一个数的二进位全部右移若干位,低位移出部分舍弃,左补0。 
3.高级语言右移和汇编语言中的逻辑右移功能一样,但不同于算术右移。 
4.逻辑左移和算术左移一样,低位补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    

原创粉丝点击