如果我有一个数组:
一个二进制位移的结果是:
数组大小不固定,移位范围为1至7(包括1和7)。目前我有以下代码(运行良好):
有比我的当前方法更快的实现方式吗?
{01101111,11110000,00001111} // {111, 240, 15}
一个二进制位移的结果是:
{10110111,11111000,00000111} // {183, 248, 7}
数组大小不固定,移位范围为1至7(包括1和7)。目前我有以下代码(运行良好):
private static void shiftBitsRight(byte[] bytes, final int rightShifts) {
assert rightShifts >= 1 && rightShifts <= 7;
final int leftShifts = 8 - rightShifts;
byte previousByte = bytes[0]; // keep the byte before modification
bytes[0] = (byte) (((bytes[0] & 0xff) >> rightShifts) | ((bytes[bytes.length - 1] & 0xff) << leftShifts));
for (int i = 1; i < bytes.length; i++) {
byte tmp = bytes[i];
bytes[i] = (byte) (((bytes[i] & 0xff) >> rightShifts) | ((previousByte & 0xff) << leftShifts));
previousByte = tmp;
}
}
有比我的当前方法更快的实现方式吗?
long
可能会提高性能,但这取决于不同的机器。有时候使用int
会更好。 - Louis Wasserman