gpt4 book ai didi

java - 在字节数组上进行右位旋转/循环移位的最快方法是什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:22:48 24 4
gpt4 key购买 nike

如果我有数组:

{01101111,11110000,00001111} // {111, 240, 15}

位移 1 的结果是:

{10110111,11111000,00000111} // {183, 248, 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;
}
}

有没有比我目前的方法更快的方法来实现这一点?

最佳答案

找出答案的唯一方法是彻底基准测试,最快的实现因平台而异。使用类似 Caliper 的工具如果您真的需要对此进行优化。

关于java - 在字节数组上进行右位旋转/循环移位的最快方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9825319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com