無符號位移(>>>、<<<) 有符號位移(>>、<<)


 無符號位移(>>>)和有符號位移(>>)的區別是

有符號位移運算時如果數字為正數時位移后在前面補0,為負數時則在位移后在前面補1

 

舉例說明最快

以15位例(負數以-15為例)

15的二進制 :00000000 00000000 00000000 00001111

-15的二進制:11111111 11111111 11111111 11110001 

計算過程:補碼(負數的二進制)=反碼+1 

反碼:11111111 11111111 11111111 11110000

補碼(即加1):11111111 11111111 11111111 11110001   也就是-15的二進制

 

一、正數 (無符號位移>>>)

15>>>2    注:2 移動的位數

15的二進制 :00000000 00000000 00000000 00001111

移動之后 :00000000 00000000 00000000 00000011 (11 舍棄)

計算之后:3

二、正數 (有符號位移>>)

15>>2

15的二進制 :00000000 00000000 00000000 00001111

移動之后:00000000 00000000 00000000 00000011 (11 舍棄)   同(>>>)

計算之后:3

三、負數(無符號位移>>>)

-15>>>2

-15的二進制:11111111 11111111 11111111 11110001 

移動之后:00111111 11111111 11111111 11111100 (01舍棄)

這個數好大的,如何計算呢?

2^2+2^3+2^4+...+2^30=1073741820
計算結果:1073741820

四、負數(有符號位移>>)

-15>>2

-15的二進制:11111111 11111111 11111111 11110001

移動之后:11111111 11111111 11111111 11111100 (01舍棄)
補碼(負數的二進制)=反碼+1
先減1:11111111 11111111 11111111 11111011
反碼:00000000 00000000 00000000 00000100 (此結果為4)
計算結果:-4

五、總結(不全面、不絕對)

15>>>2=3
15>>2=3
-15>>>2=1073741820
-15>>2=-4
當需要移位的數為正數時,有符號位移(>>)和無符號位移(>>>)是相同的。
當需要移位的數為負數時,有符號位移(>>)的結果 還為負數,無符號位移(>>>)的結果為正數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM