chess - 一个字节的尾随/前导零计数

标签 chess bitcount

我正在使用 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/

相关文章:

c - 没有时 Valgrind 打印错误?

algorithm - 使用单源最短路径遍历棋盘

python - Python中正整数所需的最小位长

c - __builtin_popcountll 和_mm_popcnt_u64 之间有什么区别?

java - 使用java在eclipse中显示带有unicode的棋子

html - 国际象棋 + 使用表格

有人可以解释一下这个 bitCount 代码是如何工作的吗?

language-agnostic - 为什么计算位数很有用?

c++ - 在开发国际象棋程序时,用给定的值初始化下面的方向数组有什么意义?