關於java中byte無符號右移 >>>

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();
	}
	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章