我一直以緊湊存儲有關對象的信息玩弄位操作,我打算做的是有一個short[][]
存儲的兩條信息每個條目,即第一組比特(8或4)包含信息,然後其餘比特(分別爲8或12)存儲剩餘的比特。爪哇 - 位運算困惑我,它的工作原理,但我認爲它不應該
在下面的代碼中,我演示了我提到的兩個示例,即將提出的問題;
private void test1() {
// This test takes a 16 bit binary number and breaks it into two
// bytes of 8 bits. It then takes the bytes and sticks them back
// together then outputs their decimal value
String st = "0011111100110111";
short s = Short.parseShort(st,2);
byte[] ba = new byte[] {
(byte)(s & 0xFF),
(byte)((s >>> 8) & 0xFF)
};
System.out.println(s);
System.out.println(ba[0]);
System.out.println(ba[1]);
byte b0 = ba[0];
byte b1 = ba[1];
short sh = (short)((b1 << 8) | b0);
System.out.println(sh);
}
private void test2() {
// This test takes two shorts and sticks them together in a
// 4 bit 12 bit configuration within a short, it then breaks
// them apart again to see if it worked!
short s0 = 4095;
short s1 = 15;
short sh = (short)((s1 << 12) | s0);
System.out.println(sh);
short[] sa = new short[] {
(short)(sh & 0xFFF),
(short)((sh >>> 12) & 0xF)
};
System.out.println(sa[0]);
System.out.println(sa[1]);
}
我主要關注的是,在測試2()我預計只有能夠使用符號的值,但是我似乎能夠使用的值4095的4位(我在12位和15預計範圍爲-2048至2047和-8至7),它是如何與這些值一起工作的,我錯過了什麼?
而且另一個問題,爲什麼我不能在測試1使用1011111100110111
()?
最後,以這種方式存儲信息是一個好主意嗎?該陣列將是約500x200或1000x 500類似的東西。
哈啊,當然,所述計算機不關心字節的整數值,直到它被解釋(即輸出),所有的時間之前,它僅僅是一個的1和0的串。天才,我完全錯過了。 – Neilos