当前位置: 首页 > 面试题库 >

移位Java BitSet

席烨
2023-03-14
问题内容

我正在使用A java.util.BitSet存储密集的位向量。

我想实现一个将位右移1的操作,类似于>>>on ints。

是否存在可将BitSets 移位的库函数?

如果没有,还有没有比下面更好的方法了?

public static void logicalRightShift(BitSet bs) {
  for (int i = 0; (i = bs.nextSetBit(i)) >= 0;) {
    // i is the first bit in a run of set bits.

    // Set any bit to the left of the run.
    if (i != 0) { bs.set(i - 1); }

    // Now i is the index of the bit after the end of the run.
    i = bs.nextClearBit(i);  // nextClearBit never returns -1.
    // Clear the last bit of the run.
    bs.clear(i - 1);

    // 0000111100000...
    //     a   b
    // i starts off the loop at a, and ends the loop at b.
    // The mutations change the run to
    // 0001111000000...
  }
}

问题答案:

这应该够了吧:

BitSet shifted = bs.get(1, bs.length());

它会为您提供与原始位相同的位集,但没有最低位。

编辑:

为了概括这一点n

BitSet shifted = bs.get(n, Math.max(n, bs.length()));


 类似资料:
  • 我目前正在学习位操作,我的任务是做一个左旋转的4位整数。 我的4位左旋转代码是 我想做一个4位循环移位,以保持作为一个4位后旋转,但似乎不能理解它是如何工作的。 例如:10(1010)左旋转1位后给出5(0101),但它给出的值是21,比我的4位多。 任何能让我理解这个问题的帮助都将不胜感激!

  • 问题内容: 当遇到按位移位运算符时,我遇到了一个有趣的场景。如果第二个操作数为负,按位移位运算如何工作?。 即,<< << b,“ <<”将a中的位模式向左移动b位。但是,如果b为负数,在运行时是否应该出错? 我能够成功运行以下代码,但我不知道它是如何工作的? 输入项 结果 “ a”的ASCII码为97。有人可以帮助我了解其工作原理吗? 问题答案: 但是,如果b为负数,在运行时是否应该出错? 不符

  • 我必须编写一个函数,对y位置的位进行左循环移位。例如,如果我将:01011000和2作为y,则函数必须返回011000001。 我已经尝试使用但它似乎是无用的。

  • 问题内容: 我希望我的位图具有屏幕的高度,并且具有比屏幕大的宽度,如果用户更改桌面,则可以向右或向左或向左移动一点,以便他可以看到整个图像。 这是我的代码,仅部分起作用: 谢谢! 问题答案: 您可以通过onOffsetsChanged()中的变量xPixels和yPixels获得准确的像素值。在这里查看我的答案:android动态壁纸缩放 例如,在onOffsetsChanged()中,您可以设置

  • 问题内容: 我要感谢一个很好的教程,该教程为Java新手解释了Java中所有“移位”如何工作。 我总是偶然发现它,但从未理解它是如何工作的。它应该解释Java中字节移位/位操作可能实现的所有操作和概念。 这只是我意思的一个示例(但我正在寻找一个讲解每种可能操作的教程): 问题答案: 好吧,官方Java教程“ 按位和位移位运算符”介绍了Java中可用的实际操作以及如何调用它们。 如果您想知道“我该如

  • 问题内容: 我确定这对任何人来说都是一件容易的事! 为什么在Java中代码像 打印 这对我来说没有意义。是一个64位数字-而它看起来像上面的一个。我知道bitshifted s会进行int提升,但是在这种情况下我看不到发生了什么。 任何关于这里发生的事情的指针都将是很好的:) 谢谢 编辑 :感谢所有的答案-单击“提交”后,我意识到发生了什么,但是进入了模式,我无法删除!非常感谢! 问题答案: 这是