Java - Int,Short,Char二进制操作

时间:2013-02-11 20:47:46

标签: java binary bit-manipulation bitwise-operators

我现在知道以下是正确的:

  • 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
  • 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

我知道上面的声音听起来很白痴,但我想在每一步都做到这一点。

所以我有值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)

但是得到结果29时它应该是285,因为二进制文件将是

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 =(短)(fm1 <&lt; 8 | of);

因为这两个都是16位好吗?

System.out.println((int)ph1);

2 个答案:

答案 0 :(得分:3)

您需要将位向左移动8。

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

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

答案 1 :(得分:1)

char是两个字节

字节是一个字节

byte ff  = (byte)  1;
byte off = (byte) 29;
short concat = (ff << 8)|off;