C++, using one byte to store two variables
- by 2di
Hi All
I am working on representation of the chess board, and I am planning to store it in 32 bytes array, where each byte will be used to store two pieces. (That way only 4 bits are needed per piece)
Doing it in that way, results in a overhead for accessing particular index of the board.
Do you think that, this code can be optimised or completely different method of accessing indexes can be used?
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;
}
I am equally interested in your opinions regarding chess representations, and optimisation of the method above, as a stand alone problem.
Thanks a lot