public static void main(String[] args) {
// 如:我們需要將byte:10001111 右移2位期望得到的結果:00100011
// 我們知道無符號右移,不論符號位是0還是1,高位統統補0;所以我們可能像下面這樣寫
byte b = (byte) 0b10001111;
System.out.println("原始二進制字符串:" + byte2Str(b));
System.out.println("無符號右移2位二進制字符串:" + byte2Str((byte) (b >>> 2)));
// 結果如下:
// 原始二進制字符串:10001111
// 無符號右移2位二進制字符串:11100011
// 原因是符號位爲1時,進行無符號右移之前會將byte轉成int: {0b11111111,0b11111111,0b11111111,0b10001111}
// 無符號右移後:{0b00111111,0b11111111,0b11111111,0b11100011}
// 輸出低字節時就出現了剛纔運行的結果
// 所以當有無符號右移的需求時,我們應該先把參與運算的字節和0xff進行與操作將不參與運算的字節置0 再進行有符號右移即可
System.out.println("無符號右移2位二進制字符串:" + byte2Str((byte) ((b & 0xff) >> 2)));
// 結果如下:
// 無符號右移2位二進制字符串:00100011
}
private static String byte2Str(byte b) {
StringBuilder sb = new StringBuilder();
for (int i = 7; i >= 0; i--) {
int bit = b >> i & 0x01;
sb.append(bit);
}
return sb.toString();
}
關於java中byte無符號右移 >>>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.