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