我需要Bit Twiddling的帮助

我喜欢看到人们编写Bit Twiddling代码,但我根本无法理解它。 通过Hacker’s Delight和http://graphics.stanford.edu/~seander/bithacks.html ,但我没有理解任何事情。

例如:

怎么来1 | 2 1 | 2返回3或如何来a ^=b; b ^= a; a ^=b; a ^=b; b ^= a; a ^=b; 交换价值等…

一种方法:

 private T[] ensureCapacity(int minCapacity) { if (tmp.length  minCapacity newSize |= newSize >> 1; int newSize = minCapacity; newSize |= newSize >> 2; newSize |= newSize >> 4; newSize |= newSize >> 8; newSize |= newSize >> 16; newSize++; if (newSize >> 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 1 | 2 = 3

我的意思是我不知道比特forms看起来怎么样,除非我使用计算器或其他东西..有没有最简单的方法来计算这些东西没有任何帮助,但记住?

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

将数字写为二进制。 这就是数字的实际表现方式。

  00000001 | 00000010 = 00000011 

你将不得不学习一点,但这里有一个小的备忘单,以二进制forms知道数字

 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 

如果你想要3,从左到右,填写包含创建数字3所需值的空格

 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 XX 

2 + 1 = 3,所以用1秒替换标有X ,用0秒替换其余部分

 00000011 

数字2相同:

 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 X 

二进制结果是。

 00000010 

对于47号:

 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 XXXXX 

二进制结果:

 00101111 

不是规则,公式或任何东西。 它只是帮助您更快地转换数字,并在脑海中练习它。 如果你想玩位,你还需要学习很多东西:-)