有在Java沒有二進制運算符可以直接與字節(8位)操作。類型爲byte,short或char的變量在執行類似這些操作之前會自動將數字提升爲32位整數,詳見here。 因此,這裏是你的代碼會發生什麼:
public static void main(String[] args) {
char hex[] = new char[] {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
byte b = (byte) 0xf1; // b is a byte with 0xf1
byte d = (byte)(b>>>4); // b is converted to int, becoming 0xfffffff1 then shifted
// to the right by 4 bits, resulting in 0x0fffffff
System.out.println("b>>>4=0x" + hex[(d>>4)&0x0f] + hex[d&0x0f]);
}
如果你想獲得它只是更容易在下面的例子中使用32個變量對所有二進制運算,這樣的權利:
public static void main(String[] args) {
char hex[] = new char[] {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
byte b = (byte) 0xf1;
int ib = b & 0xff;
byte d = (byte)(ib>>>4);
System.out.println("b>>>4=0x" + hex[(d>>4)&0x0f] + hex[d&0x0f]);
}
注意:如果您不知道,可以通過調用Integer.toHexString(n)
輕鬆打印十六進制格式的整數。