code: def _handle_shift(self, other: Union[int, "BitVec"], operator: Callable) -> "BitVec":
          
          if isinstance(other, BitVecFunc):
              return operator(other, self)
          if not isinstance(other, BitVec):
              return BitVec(
                  operator(self.raw, other), annotations=self.annotations
              )
          union = self.annotations + other.annotations
          return BitVec(operator(self.raw, other.raw), annotations=union)
docs: Handles shift
          :param other: The other BitVector
          :param operator: The shift operator
          :return: the resulting output