Измените BIT_POS на это:
#define BIT_POS(pos, state) (state << (CHAR_BIT - 1 - (pos % CHAR_BIT)))
затем измените код на:
bool state = (old_array[BYTE_POS(old_pos)] & BIT_POS(old_pos, 1)) != 0);
new_array[BYTE_POS(new_pos)] |= BIT_POS(new_pos, state);