正如我目前所知,以下是正确的:
- char 8 位值,例如 0 0 0 0 0 0 0 0
- 短 16 位值,例如 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- int 32 位值,例如 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我知道以上听起来很白痴,但我想描述每一步。
所以我有值 1 和 29,如果我正确的话,它们都是 8 位。
1: 0 0 0 0 0 0 0 1
29: 0 0 0 1 1 0 0 1
现在因为这些是 8 位,我可以执行以下操作
char ff = (char) 1;
char off = (char) 29;
所以这就是我讲述我的两个价值观。
我现在想连接这些值,所以它看起来像二进制中的 1 2 9 ,即:0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1
我目前在做:
short concat = (short) (ff | off)
但是当它应该是 285 时得到结果 29,因为二进制应该是
32768 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1
0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1
我到底哪里错了:(?
-- 更新代码解决方案 --
byte of= (byte) 29;
byte fm1 = (byte) 1;
char ph1 = (char) (fm1<<8 | of);
或者是短 ph2 = (short) (fm1 <<8 | of);
什么更好,因为都有 16 位?
System.out.println((int)ph1);