@Override
    public Value evaluate(Value... operands) throws Exception {
        // we want only two operands
        if (operands.length != 2) {
            throw new EvalException(this.name()
                    + " Error: wrong number of operands");
        }

        // get operands
        Value l = operands[0];
        Value r = operands[1];

        if (l.getType().isNumeric() && r.getType().isNumeric()) {

            if (l.getType() == ValueType.LONG) {
                return new Value(new Long(l.getLong() >> r.getLong()));
            }
            return new Value(new Integer(l.getInt() >> r.getInt()));

        }

        throw new EvalException(this.name() + " Operands error! Type mismatch!");
    }