在这种情况下,我需要在两个大小相等的部分1001
和10
中分割数字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
任何解决方法?
答案 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
。