java 關於-2>>3之類的移位問題

 

1.Java中涉及byte、short和char類型的運算操作首先會把這些值轉換爲int類型,然後對int類型值進行運算,最後得到int類型的結果。因此,如果把兩個byte類型值相加,最後會得到一個int類型的結果。如果需要得到byte類型結果,必須將這個int類型的結果顯式轉換爲byte類型。

 

2.負數向右移位:如 -2>>3

 

步驟:注意java中int是4個字節,32位太長,爲了方便解說,當它只有8位。不會影響結果。

a.得到-2的原碼,即:10000010   (最高位爲符號位,正數爲0,負數爲1)

b.由於計算機中負數都是按補碼形式進行存儲運算的,所以先要求補碼:

1.原碼取反得到反碼:  11111101  (注意,符號位不用取反)

2.反碼+1得到補碼:    11111110 

c.得到補碼後,然後運算:爲了看清楚,我們分三次進行

1.先向右移動1位,在最高位補符號位(因爲是負數,所以最低位的0移出去,最高位補1,如果是整數右移,則最高位補 0),得到結果:11111111

2.和上面一樣,再右移1位,結果爲 11111111  (如果按int 32爲,則不會全是1,但是不影響結果)

3.再右移移位,得到結果: 11111111 

d.補碼運算完成後,然後要還原成原碼。首先將結果減1,得到結果的反碼: 11111110

e.然後將結果的反碼取反得到原碼,爲:10000001 (即-1)

f.所以 -2>>3 == -1。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章