1. 程式人生 > >組合語言/C51/C語言/C++中左移的不同

組合語言/C51/C語言/C++中左移的不同

彙編:
1.對於51微控制器:RLC A;即將累加器ACC中內容左移1位,最低位被CY原始值替代,最高位移入進位標誌CY
  中,同理還有RRC A。
  具體使用:MOV A,#0FFH;
         CLR C;
          RLC A;

2.對於8086:

(1)左移:SHL/SAL DST CNT 移位時運算元的最低位將移入0,最高位移入CF中,若左移若干位,則CF中只保留最後一次移出的內容。

(2) 右移:分為邏輯右移與算術右移。邏輯右移即SHR,用法與SHL同;算術右移即SAR,移位時運算元的最高位移入的是它原來的值,即最高位保持不變,最低位同樣移入CF,主要用於帶符號數的右移。

(3)迴圈移位:ROR/ROL/RCR/RCL DST CNT 類似51的移位指令,不過可以一次操作多位移動。

C51:

1.在C51中操作符為"<<",每執行一次左移指令,運算元最高位移入CY,CY中本來的數丟失,最低位補0,其他位依次向左移動1位。右移指令類同。
2.迴圈左移:使用C51庫函式自帶的 unsigned char _crol_(unsigned char c,unsigned b);實現將字元C迴圈左移b位,跟8086彙編的迴圈移位類同,同樣右移函式為_cror_;

標準C:

1.">>",C語言中的右移運算,一般情況下是高位補零,但在處理有符號數的時候會因計算機系統的不同而不同。有符號數高位是零,則右移時高位補零;如果是負數即高位是1,那麼有的系統會移入1(移動幾位就補幾個1),稱算術右移(大部分系統),有的會移入0,稱邏輯右移。

2."<<",C語言中的左移運算,無論是有符號數還是無符號數都是按照邏輯左移來操作,即向左移動若干位,低位補0即可。

C++:

">>"和"<<"運算子如果沒有被過載的情況下使用與標準C相同,如果被過載如輸入輸出流的操作,則變成輸入輸出操作符,如cout<<xxx; cin>>yyy; 當然也可以被過載為其他的操作。