0

正如我目前所知,以下是正确的:

  • 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);
4

2 回答 2

3

您需要将位左移 8 位。

short concat = (short) (ff <<8 | off)

管道是按位或,所以你最终把相同的位放在同一个地方,把 1 放在第一个或者第二个字符有 1 的地方。

于 2013-02-11T20:49:55.430 回答
1

char 是两个字节

字节是一个字节

byte ff  = (byte)  1;
byte off = (byte) 29;
short concat = (ff << 8)|off;
于 2013-02-11T20:50:41.440 回答