(x << y) is mathematically equivalent to (x * pow(2, y)). Likewise, (x >> y) is mathematically equivalent to (x / pow(2, y)) with integer division.
EDIT:
One assumption is that there is no overflow. Another assumption is that the shift amount is not negative. If the shift amount is negative, then treat it as (x << (n - y)) or (x >> (n - y)) respectively, where n is the number of bits used to represent the type.