tags : Algorithms, Data Structures

FAQ

Why bitshift and have data structures in base2?

  • using powers of 2 allows the use of cheap bit masks
  • shifts are cheaper than expensive division

Resources

Basics

Positional notation

Multiplying (Left shift <<)

  • 1 << 8 = 1 << 23 = 256 = 1 shifted by 8 bits to left

Division (Right shift >>)

  • 40 >> 1 = 40 >> 20 = 20 = 40 divided by 21
  • 40 >> 2 = 40 >> 21 = 10 = 40 divided by 22
  • 36 >> 2 = 36 >> 21 = 09 = 36 divided by 22
  • 1024 >> 8 = 1024 >> 23 = 4 = 1024 divided by 28

Logical and arithmetic shifts

  • Arithmetic : Respect the sign bit (>> / <<)
  • Logical : Do not respect the sign bit (>>> / <<<)
  • In Java you can explicitly tell which one to use, in Cpp or Golang, implementations choose shift to perform depending on the type of integer being shifted.
    • Signed integers are shifted using the arithmetic shift.
    • Unsigned integers are shifted using the logical shift.