Java shl和shr填充问题

时间:2011-09-15 16:02:01

标签: java bit-shift

有没有一种方法可以在没有字节丢失的情况下向左或向右移动,这样填充的字节就是那些被占用的字节?

例如:10010 shr 2 => 10100 或:11001 shl 4 => 11100

信息的丢失似乎很不方便,因为你不应该把它用于数学......

我只想以不同的字节顺序通过网络发送包,所以转回对我来说非常重要

1 个答案:

答案 0 :(得分:2)

您要做的是Java支持的按位旋转。

public class Binary {

    public static void main(String[] args) {
        Integer i = 18;

        System.out.println(Integer.toBinaryString(i));
        i = Integer.rotateRight(i, 2);

        System.out.println(Integer.toBinaryString(i));
    }

}

这将打印出来:

10010
10000000000000000000000000000100

被移开的2位已经旋转到开始。但是中间有很多0填充,因为Java中的整数占用了32位。

如果您想自己实现此行为,则在内部将其实现为:

public static int rotateLeft(int i, int distance) {
    return (i << distance) | (i >>> -distance);
}

public static int rotateRight(int i, int distance) {
    return (i >>> distance) | (i << -distance);
}