Bitwise Operations Tips/Tricks
How do you negate a number, ignoring leading zeroes?
Let's say you have unsigned, 8 bit integer: 5
. How can we get the inverse of this? (~5
)
5
in binary is 101
, so the inverse would be 010
or 2
.
If we were to do the bitwise operation inverse, we would get something different. Since it is a 8 bit integer, 5
is actually 00000101
and the inverse would be 11111010
.
So how do we do this? ~5 & ((1 << 3) - 1)
We take 1
, shift it over by however many digits we want to inverse and subtract 1. This gives us leadings zeroes with a specific number of tailing ones. We then intersect this with the inverse. This essentially get's rid of the leading ones that result from the inverse.
How do you do a bitwise equals operation?
Let's say we have 101110
and 101001
. How can we get a binary value that shows which digits are equal? In this case, 111000
?
You can do a XOR and negate!