if (sign == 0 || val.sign == 0) return BigInteger.ZERO;
for (int i = z.length - 1; i >= 0; i--) { long a = z[i] & IMASK; long value = 0;
    public BigInteger multiply(BigInteger val)    {        if (sign == 0 || val.sign == 0)            return BigInteger.ZERO;        int[] res = new int[magnitude.length + val.magnitude.length];        return new BigInteger(sign * val.sign, multiply(res, magnitude, val.magnitude));    }