0

我有这个演示程序,它显示了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 的值

4

4 回答 4

2

11110110 2 >> 2 == 11111101 2 == -3 10

这是一个符号扩展的右移操作——当它右移时,它不会在左边插入零,而是复制最高位的值。其余的解释是关于有符号整数的二进制补码表示。

通常,将负整数右移一个n位置会产生除以 2 n并从中减去 1 的效果。

于 2012-05-09T12:00:03.460 回答
0

Java 使用二进制补码来表示负整数。因此,-10十进制是1111111111110110二进制的。

>>符号扩展右移运算符。这意味着如果最高位(即符号位)1在第一个操作数中,那么它也在1结果中。

向右移动1111111111110110两个位置得到1111111111111101,它是-3十进制的。

于 2012-05-09T12:02:37.380 回答
0

您可以将以下两行添加到您的程序中以稍微清理一下:

System.out.println(Integer.toBinaryString(-10));
System.out.println(Integer.toBinaryString(-3));

//Output:
11111111111111111111111111110110
11111111111111111111111111111101
                            --^

>> 2意味着将两个位置的二进制表示-10向右移动(屈服-3)。

于 2012-05-09T12:03:13.290 回答
0
public void decimalToBinaryUsingBitManipulation(int value)
{
    if (value == 0)
        return;
    decimalToBinaryUsingBitManipulation(value >>> 1);
    System.out.print(value & 1);
}
于 2014-03-21T14:08:31.267 回答