class MaskedLong implements Comparable<MaskedLong> {

	public MaskedLong invShiftRightLogical(long n) throws SolverException {
		if (n == 0) {
			return this;
		}
		long checkDef = Long.MIN_VALUE >> (n - 1) & val;
		if (checkDef != 0) {
			throw new SolverException(
				"Cannot invert logical right shift where ones appear on the left");
		}
		return new MaskedLong(msk << n, val << n);
	}

	protected  MaskedLong(long msk, long val);

}