java - 我需要关于 Bit Twiddling 的帮助

标签 java bit-manipulation bit

我喜欢看到人们编写 Bit Twiddling 代码,但我根本无法理解它。经历了黑客的喜悦和http://graphics.stanford.edu/~seander/bithacks.html ,但我什么也没明白。

例如:

怎么1 | 2 返回 3 或者为什么 a ^=b; b^=a; a ^=b; 交换值等等...

一种方法:

private T[] ensureCapacity(int minCapacity) {
   if (tmp.length < minCapacity) {
   // Compute smallest power of 2 > minCapacity
   newSize |= newSize >> 1;
   int newSize = minCapacity;
   newSize |= newSize >> 2;
   newSize |= newSize >> 4;
   newSize |= newSize >> 8;
   newSize |= newSize >> 16;
   newSize++;

    if (newSize < 0) // Not bloody likely!
      newSize = minCapacity;
    else
      newSize = Math.min(newSize, a.length >>> 1);

      @SuppressWarnings({"unchecked", "UnnecessaryLocalVariable"})
      T[] newArray = (T[]) new Object[newSize];
      tmp = newArray;
   }
   return tmp;
 }

下面的人正在做什么:

int newSize = minCapacity;
newSize |= newSize >> 1;
newSize |= newSize >> 2;
newSize |= newSize >> 4;
newSize |= newSize >> 8;
newSize |= newSize >> 16;
newSize++;

newSize = Math.min(newSize, a.length >>> 1);

最好使用 >>>>> 运算符我的意思是在 Joshua Bloch 修复了损坏的二分搜索之后我明白使用 >>> 是安全的 而不是 >>。请帮忙,如果有教程,那么上述来源我将非常感激。

计算位输出的最简单方法是什么,例如 1 | 2 = 3

我的意思是,除了使用计算器或其他东西之外,我不知道位形式看起来如何。.有没有最简单的方法来计算这些东西,而无需任何帮助,但要记住?

最佳答案

What is the easiest way to calculate the output of bits for example 1 | 2 = 3.

将数字写成二进制。这就是数字的真实表示方式。

  00000001
| 00000010
= 00000011

关于java - 我需要关于 Bit Twiddling 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16549303/

相关文章:

java - 用下一个替换元音不起作用

java - Selenium WebDriver 丢失 IE 中打开的新窗口的信息

JavaScript 从左侧开始设置位

c - 如何生成 256 位掩码

java - gwt 应用程序突然停止运行

java - 如何编写junit mockito测试用例

c - 读取位宽数据的等效方法

c++ - 按位非的奇怪输出

Verilog 为什么是 [NumberOfBits-1 :0] and what is it actually doing

java - Java 的位移运算符在底层是如何工作的?