@Override
	public Value evaluate(Value... operands) throws Exception
			 {
		// we want only two operandInspectorValueTypes
		if (operands.length != 1)
			throw new EvalException("Error: wrong number of operands ("+operands.length+")");
                
		// get operands
		Value l = operands[0];

		// if types match
		if (l.getType() == ValueType.BOOLEAN) {
			return new Value(new Boolean(!l.getBoolean()));
		}

		if (l.getType() == ValueType.INTEGER) {
			return new Value(new Integer(~l.getInt()));
		}

		if (l.getType() == ValueType.LONG) {
			return new Value(new Long(~l.getLong()));
		}

	

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