void set_bit(unsigned char *bit_array, char bit_position, char new_state) { if(new_state) bit_array[bit_position >> 3] |= ( 1 << (bit_position & 7) ); else bit_array[bit_position >> 3] &= ~(1 << (bit_position & 7)); }
By Michael Rigby Jones
By butchering the routine a bit to make it less general i.e. removing the bit_array pointer and by breaking down the maths into separate chunks I managed to get this down to 38 words, at the cost of a couple of temp variables.void set_bit(unsigned char bit_position, unsigned char new_state) { unsigned char bitmask; unsigned char byteptr; byteptr = bit_position >> 3; bitmask = 1 << (bit_position & 7); if(new_state) { bitarray[byteptr] |= bitmask; } else { bitarray[byteptr] &= ~bitmask; } }