我有这个演示程序,它显示了java中移位运算符的概念。但我不清楚这个程序是如何生成这个答案的。所以请建议我如何做到这一点。
public class Operator {
public static void main(String[] args) {
int s = -10;
s = s >>2;
System.out.println("value of i=" + s);
}
}
输出:
i=-3 的值
11110110 2 >> 2 == 11111101 2 == -3 10
这是一个符号扩展的右移操作——当它右移时,它不会在左边插入零,而是复制最高位的值。其余的解释是关于有符号整数的二进制补码表示。
通常,将负整数右移一个n
位置会产生除以 2 n并从中减去 1 的效果。
您可以将以下两行添加到您的程序中以稍微清理一下:
System.out.println(Integer.toBinaryString(-10));
System.out.println(Integer.toBinaryString(-3));
//Output:
11111111111111111111111111110110
11111111111111111111111111111101
--^
>> 2
意味着将两个位置的二进制表示-10
向右移动(屈服-3
)。
public void decimalToBinaryUsingBitManipulation(int value)
{
if (value == 0)
return;
decimalToBinaryUsingBitManipulation(value >>> 1);
System.out.print(value & 1);
}