private ExpressionValue applyBinaryOperator(ExpressionOperator operator,
			LongExpressionValue expressionValue) throws ExpressionException {
		long otherValue = expressionValue.getLongValue();
		long offset = value.getOffset();
		int compareResult = Long.compareUnsigned(offset, otherValue);

		switch (operator) {
			case BITWISE_AND:
				return addressExpressionOf(offset & otherValue);
			case BITWISE_OR:
				return addressExpressionOf(offset | otherValue);
			case BITWISE_XOR:
				return addressExpressionOf(offset ^ otherValue);
			case DIVIDE:
				return addressExpressionOf(offset / otherValue);
			case SUBTRACT:
				return addressExpressionOf(value.subtract(otherValue));
			case ADD:
				return addressExpressionOf(value.add(otherValue));
			case MULTIPLY:
				return addressExpressionOf(offset * otherValue);
			case SHIFT_LEFT:
				return addressExpressionOf(offset << otherValue);
			case SHIFT_RIGHT:
				return addressExpressionOf(offset >> otherValue);
			case EQUALS:
				return booleanExpression(compareResult == 0);
			case GREATER_THAN:
				return booleanExpression(compareResult > 0);
			case LESS_THAN:
				return booleanExpression(compareResult < 0);
			case GREATER_THAN_OR_EQUAL:
				return booleanExpression(compareResult >= 0);
			case LESS_THAN_OR_EQUAL:
				return booleanExpression(compareResult <= 0);

			default:
				throw new ExpressionException(
					"Binary Operator \"" + operator +
						"\" with Long operands not supported by Address values!");
		}
	}
Address operand values. See {@link ExpressionValue}. Defines supported operators and other
operands for expression values that are addresses.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/AddressExpressionValue.java