我正在研究棋盘的表示,我计划将它存储在 32 字节数组中,其中每个字节将用于存储两块。(这样每件只需要 4 位)
这样做会导致访问板的特定索引的开销。您认为可以优化此代码还是可以使用完全不同的访问索引的方法?
C++
char getPosition(unsigned char* c, int index){
//moving pointer
c+=(index>>1);
//odd number
if (index & 1){
//taking right part
return *c & 0xF;
}else
{
//taking left part
return *c>>4;
}
}
void setValue(unsigned char* board, char value, int index){
//moving pointer
board+=(index>>1);
//odd number
if (index & 1){
//replace right part
//save left value only 4 bits
*board = (*board & 0xF0) + value;
}else
{
//replacing left part
*board = (*board & 0xF) + (value<<4);
}
}
int main() {
char* c = (char*)malloc(32);
for (int i = 0; i < 64 ; i++){
setValue((unsigned char*)c, i % 8,i);
}
for (int i = 0; i < 64 ; i++){
cout<<(int)getPosition((unsigned char*)c, i)<<" ";
if (((i+1) % 8 == 0) && (i > 0)){
cout<<endl;
}
}
return 0;
}
我对您对国际象棋表示和上述方法优化的意见同样感兴趣,作为一个独立的问题。
非常感谢
编辑
感谢您的回复。前段时间我创建了跳棋游戏,我使用的是 64 字节的棋盘表示。这次我尝试了一些不同的方法,只是为了看看我喜欢什么。内存不是什么大问题。Bit-boards 绝对在我的尝试清单上。谢谢