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 = 13;
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]);
}
我所期望的就是这个;
二进制中的 s0
是 b0000_1111_1111_1111_1111
二进制中的 s1
是 b0000_0000_00_0000_00_11001
sh
然后成为 b1101_1111_1111_1111_1111_1111
先前的 1
是符号, 其余的 15 位数给出了数值, 所以小数点中的 sh
是 24575
, 但这不是我对控制台的输出( 这是 -8193
)。
我哪里错了?