c++ - How to write new value to individual bit without (if/else) operator -
i know can set bit n by:
value |= 1 << n;
or clear bit n by:
value &= ~(1 << n);
but efficient way "write" (not set or clear) bit n? example, have function:
__inline void writebit(char &value, int n, bool state) { if(state) value |= 1 << n; else value &= ~(1 << n); }
can somehow rid of if/else statements , instead using binary , shift operators?
the page of bit hacks suggests using following formula:
value ^= (-state ^ value) & (1 << n);
the declaration of state
needs change bool
int
.
this trick works on computers twos complement representation of negative numbers, because unary minus -state
changes state 1
number composed of ones, , leaves 0 unchanged.
an alternative superscalar cpus looks this:
value = (value & ~(1 << n)) | (-state & (1 << n));
Comments
Post a Comment