關於無符號右移出現的差值問題

2021-10-07 07:04:11 字數 956 閱讀 1441

對於無符號位移的問題,之前我在大學學習的時候知道對於無符號位移,僅僅是無論正負都將會得到乙個正數,今天偶然間再看到時出現了乙個讓我困惑的問題【基礎不牢,地動山搖,可怕】

public

class

bitoperation

}

按照之前的分析如下

public class bitoperation 

}

但是結果是

public

class

bitoperation

}console

無符號位移的值為:

1073741821

這是為什麼?

在計算機內部數字的儲存是以二進位制的補碼來進行儲存的,也就是說,對於-

10原碼 100

0000

0000

0000

0000

0000

0000

0101

0反碼 111

1111

1111

1111

1111

1111

1111

1010

1補碼 111

1111

1111

1111

1111

1111

1111

1011

0接著進行無符號右移兩位

得到 001

1111

1111

1111

1111

1111

1111

1110

1因為正數的原碼=補碼=反碼,所以得到的即為無符號位移的結果。

小夥伴們有時間了可以再看看資料結構和計算機組成原理,基礎不牢地動山搖,工作時會讓你莫名的surprise!!!

無符號右移負數 關於負數的右移與無符號右移運算小結

對於帶符號右移,若為負數,則在儲存時首位表示符號位,其值為1,表示該值是負數的移位,在移位過程中,高位補1,若符號位是0,表示是正數,在移位過程中高位補零,兩者的前提是符號位保持不變 對於負數的右移 因為負數在記憶體中是以補碼形式存在的,所有首先根據負數的原碼求出負數的補碼 符號位不變,其餘位按照原...

關於負數的右移與無符號右移運算小結

對於帶符號右移,若為負數,則在儲存時首位表示符號位,其值為1,表示該值是負數的移位,在移位過程中,高位補1,若符號位是0,表示是正數,在移位過程中高位補零,兩者的前提是符號位保持不變 對於負數的右移 因為負數在記憶體中是以補碼形式存在的,所有首先根據負數的原碼求出負數的補碼 符號位不變,其餘位按照原...

關於負數的右移》與無符號右移》運算小結

對於帶符號右移,若為負數,則在儲存時首位表示符號位,其值為1,表示該值是負數的移位,在移位過程中,高位補1,若符號位是0,表示是正數,在移位過程中高位補零,兩者的前提是符號位保持不變 對於負數的右移 因為負數在記憶體中是以補碼形式存在的,所有首先根據負數的原碼求出負數的補碼 符號位不變,其餘位按照原...