There are two types of right-shift in C - logical and arithmetic.
GCC (which is the compiler the Arduino IDE uses) selects which one to use depending on whether the type you are shifting is signed or not:
- If it's signed then use an arithmetic shift
- If it's unsigned then use a logical shift
In a logical shift, the value is literally shifted to the right padding the left side with zeros. An arithmetic shift, however, shifts and extends the sign. I.e., it performs an arithmetical "divide by 2". That means if you right shift a negative value to still have a negative value (Note: this behaviour is implementation specific, so is only applicable to GCC. For other compilers in other situations you will have to check the documentation of that compiler).
So if you store the results of analogRead() in an unsigned integer variable >> N will right shift the value N times. If you store it in a signed integer it will divide the value by 2 N times.
For a positive value, which the results of analogRead() will be, the end result is the same - divide by 2 N times. However, by using an unsigned variable you are letting the compiler know it doesn't need to do sign extension, which improves the efficiency of the code slightly.
So if you right-shift 6 times you reduce a 10-bit value down to (10-6) 4 bits. 24 is 16, so you get 16 possible values. 24-1 is 15, so you get values 0-15 in your final value.