Have you ever had to use bit shifting in real programming projects? Most (if not all) high level languages have shift operators in them, but when would you actually need to
One place I use them all the time is when transposing the endian-ness of integers for cross-platform applications. They also sometimes come in handy (along with other bit-manipulation operators) when blitting 2D graphics.
Fast Fourier transform — FFT and it's Cooley-Tukey technique will require use bit shifting operations.
Find the nearest power of two greater or equal to given number:
1 << (int)(ceil(log2(given)))
Needed for texturing on hardware that does not support arbitrary texture sizes.
Yes, bit shifting is being used at low-level embedded software all the time. It can also be used as an almost magic trick to perform extremely fast math operations, have a look at
http://betterexplained.com/articles/understanding-quakes-fast-inverse-square-root/
I use it in a project for an embedded system that has to read a monitor's EDID data. Some data in an EDID is encoded like this:
Byte #3:
Horizontal Blanking -- lower 8 bits
Byte #4:
Lower Nibble: Horizontal Blanking -- upper 4 bits
Upper Nibble: something else
I used them a lot in image compression/decompression, where the bits in a bitmap were compressed. Using http://en.wikipedia.org/wiki/Huffman_coding the things being compressed consist of various numbers of bits (they're not all byte-aligned), and therefore you need to bit-shift them when you encode or decode them.