Yiling's Blog

(This site is very broken right now due to
an ill-planned domain migration. Another
version of this site built using Next.js will
be brought online later.)

Making Sense of Bitwise Operations

Each bit should be thought of as a “switch” that is either on or off, or, the bit is either set or not set. As a matter of fact, this precisely describes what a CPU does at the lowest level – flipping billions and billions (and counting!) of switches/bits.

Perhaps, and that is a big perhaps, an easier way to start thinking binary arithmetic is to think of a binary 1 as a decimal 5.

Bitwise operations in JavaScript

Refer to MDN Web Docs – Bitwise operators.

It is worth specific noting that:

  • JavaScript handles bitwise operations in 32-bit, even though leading 0 bits may not be displayed.
  • It appears that after all but zero-fill right shift operations, JavaScript would evaluate the resulting binary number using two’s complement for signed number representation.
  • The above signed evaluation does not appear to happen when parseInt() is called with radix 2.
  • The above means that if bitwise operations are performed on a binary number whose 32th bit is 1, the resulting decimal representation may not be what a person might naively expect. For this reason, where requirements permit, a person should try to think of bitwise operations only in the binary context.

What happens when a bitwise operation is performed

& (AND)

  • 0: Unset a bit
  • 1: No change to the bit

| (OR)

  • 0: No change to the bit
  • 1: Set a bit

^ (XOR)

  • 0: No change to the bit
  • 1: Flip a bit

+ 1

Flip the right most 0 and everything to the right of that bit.

– 1

Flip the right most 1 and everything to the right of that bit.

To be continued…

(These are the most important details I have been able to gather so far. Remember to add more if more is discovered.)

Additional resources

  • Bitwise Algorithms – GeeksforGeeks (Be careful with this one though. While the concepts/ideas they describe are sound and rather comprehensive, at least one, if not more, of their articles seems to be filled with minor mistakes.)