https://blog.csdn.net/xxx134617/article/details/7454774java
java中int類型佔4個字節,二進制用補碼錶示:.net
3的二進制表示: 00000000 00000000 00000000 00000011對象
-3的二進制表示:11111111 11111111 11111111 11111101blog
1.左移<<:左移位運算符(<<)能將運算符左邊的運算對象向左移動運算符右側指定的位數(在低位補0).源碼
如:擴展
3<<1=00000000 00000000 00000000 00000110=6;二進制
-3<<1=11111111 11111111 11111111 11111010=-6;計算機
2.有符號右移>>:「有符號」右移位運算符(>>)則將運算符左邊的運算對象向右移動運算符右側指定的位數。「有符號」右移位運算符使用 了「符號擴展」:若值爲正,則在高位插入0;若值爲負,則在高位插入1。移動
3>>1=00000000 00000000 00000000 00000001=1;位運算
-3>>1=11111111 11111111 11111111 11111110=-2;
3.無符號右移:
3>>>1=00000000 00000000 00000000 00000001=1;
-3>>>1=01111111 11111111 11111111 11111110=2147483646;
---------------------
計算過程:
-3的源碼:
10000000 00000000 00000000 00000011
反碼:除符號位取反
11111111 11111111 11111111 11111100
補碼:除符號位+1
11111111 11111111 11111111 11111101
-3<<1
計算機中的二進制表示(-3的二進制補碼)
11111111 11111111 11111111 11111010
轉十進制數
1)除去符號位減1
11111111 11111111 11111111 11111001
2)除去符號位,按位取反;結果就是負數的源碼;
10000000 00000000 00000000 00000110
- 6