gpt4 book ai didi

java - BitSet LeftShift 环绕问题

转载 作者:行者123 更新时间:2023-12-02 03:38:03 25 4
gpt4 key购买 nike

我正在尝试使用 BitSet 创建一个在 Java 中进行左移并进行环绕的方法,但我不知道如何让它进行环绕。现在,我的方法只是删除第一位并保留其余部分,而不将第一位添加到末尾。

public static BitSet leftShift(int amount, BitSet b){
BitSet bit2 = new BitSet(b.length());

for(int i = b.length(); i > 0; i--){
bit2.set((i-amount)%b.length(), b.get(i));
}
return bit2;
}

最佳答案

您的代码中有两个问题。

  1. 循环边界中存在差一错误。 BitSet索引是从零开始的。所以你应该从 b.length() - 1 开始并数到 i >= 0或者更好的是不要试图打破常规,而是做通常的for (int i = 0; i < b.length(); i++)
  2. 您的指数计算不会使用负数进行回绕。修复它的一个简单方法是添加 b.length()取模之前:(i + b.length() - amount) % b.length()

最后,虽然这不是一个错误,但迭代 BitSet 的常用方法是这样的:就是使用nextSetBit而不是遍历所有索引。

综合起来,它看起来像这样:

BitSet result = new BitSet(b.length());

for (int i = b.nextSetBit(0); i != -1; i = b.nextSetBit(i + 1)) {
int j = (i + b.length() - amount) % b.length(); // new index after wrapping
result.set(j);
}
return result;

关于java - BitSet LeftShift 环绕问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199396/

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