Logical shift right.

        :param StridedInterval shift_amount: The amount of shifting
        :return: The shifted StridedInterval
        :rtype: StridedInterval

def rshift_logical(self, shift_amount):
        """
        Logical shift right.

        :param StridedInterval shift_amount: The amount of shifting
        :return: The shifted StridedInterval
        :rtype: StridedInterval
        """

        lower, upper = self._pre_shift(shift_amount)

        # Shift the lower_bound and upper_bound by all possible amounts, and union all possible results

        ret = None

        for amount in xrange(lower, upper + 1):
            si_ = self._rshift_logical(amount)

            ret = si_ if ret is None else ret.union(si_)

        ret.normalize()
        ret.uninitialized = self.uninitialized
        return ret