我正在使用 Java 编写国际象棋引擎。
我试图找到一个字节中第一个 1 位的索引和最后一个 1 位的索引。
我目前在 Java 中使用 Long.numberOfTrailingZeros()(或类似的东西),并且想模拟该功能,但字节除外。
会不会是这样的:
byte b = 0b011000101;
int firstOneBit = bitCount ((b & -b) - 1);
如果是这样,我将如何相对有效地实现 bitCount。我不介意好的解释,请不要只给我代码。
最佳答案
使用包含 256 个条目的查找表。 创建它:
unsigned int bitcount ( unsigned int i ) {
unsigned int r = 0;
while ( i ) { r+=i&1; i>>=1; } /* bit shift is >>> in java afair */
return r;
}
这当然不需要很快,因为您最多执行 256 次来初始化您的表格。
关于chess - 一个字节的尾随/前导零计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/376840/