It is a bit shift operator (in this context on a long
variable).
It shifts all bits over by 2 places, resulting in a multiplication by four (just as you would add two digits in a base 10 number to multiply by 100. To generalize, shifting n places will multiply the number by 2^n
). For example:
unsigned int x = 0xA; // x = 1010 (10 base 10)
unsigned int y = x << 1; // y = 10100 (20 base 10)
You can perform division by two by shifting the bits to the right (i.e., chopping one off the end)
unsigned int x = 0xA; // x = 1010 (10 base 10)
unsigned int y = x >> 1; // y = 101 (5 base 10)