Java使用位移将两个部分分成两部分

时间:2014-10-16 17:49:05

标签: java bit-shift

在这种情况下,我需要在两个大小相等的部分100110中分割数字9(01)的位。

我的第一个想法是转移它但是对于正确的数字我没有得到预期的结果,我怀疑这是由于符号(在java :()中没有未签名。

我目前的代码如下:

long num=9;
System.out.println(Long.toBinaryString(num));
long num1=num>>2;
System.out.println(Long.toBinaryString(num1));
long num2=num<<2;
System.out.println(Long.toBinaryString(num2));

输出:

1001
10
100100

任何解决方法?

2 个答案:

答案 0 :(得分:1)

要获得较低的部分,您需要使用按位AND ...所以如果向右移2位以获得较高的部分,则需要AND与二进制数11(两位为1)以获得较低的值部分。这里的代码应该适用于任何班次:

long num = 9;
int shift = 2

System.out.println(Long.toBinaryString(num));
long num1 = num >> shift;
System.out.println(Long.toBinaryString(num1));
long num2 = num & ( (1<<shift) - 1);
System.out.println(Long.toBinaryString(num2));

计算num2的解释,shift 2, 0b 表示伪编码的二进制文字:

( (1<<shift) - 1) == ( (1<<2) - 1)  == ( 0b100 - 1) == 0b11 == two bits set

从中应该清楚它对任何shift值的作用。

答案 1 :(得分:1)

您可以将num1移回2并从num中减去它。这将为您提供num2