有没有一种方法可以在没有字节丢失的情况下向左或向右移动,这样填充的字节就是那些被占用的字节?
例如:10010 shr 2 => 10100 或:11001 shl 4 => 11100
信息的丢失似乎很不方便,因为你不应该把它用于数学......
我只想以不同的字节顺序通过网络发送包,所以转回对我来说非常重要
答案 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);
}