my::LongInt my::operator -(my::LongInt const &_a, my::LongInt const &_b)
{
    if (_a.sign == _b.sign){
        LongInt result;
        LongInt a, b;
        unsigned int digit = Pow(2, CHAR_BIT);
        unsigned int  help;
        if (_a < _b){  //получаем знак разности и после работаем с числами a и b, причем 0 <= b <= a
            result.sign = false;
            if (abs(_a) < abs(_b)){
                a = abs(_b);
                b = abs(_a);
            }
            else{
                b = abs(_b);
                a = abs(_a);
            }
        }
        else{
            result.sign = true;
            if (abs(_a) < abs(_b)){
                a = abs(_b);
                b = abs(_a);
            }
            else{
                b = abs(_b);
                a = abs(_a);
            }
        }
        result.number = a.number;
        for(unsigned int i = 0; i < b.number.GetSize(); i++){
            if (a.number[i] >= b.number[i])
                result.number[i] -= b.number[i];
            else{
                help = a.number[i] + digit - b.number[i];
                result.number[i] = (char) help;
                int j = i + 1;
                for (; a.number[j] == 0; j++){
                    a.number[j] = digit - 1;
                    result.number[j] = digit - 1;
                }
                a.number[j]--;
                result.number[j]--;
            }
        }
        result.DelZero();
        return result;
    }
    else{
        LongInt b(_b);
        b.sign = !b.sign;
        return _a + b;
    }
}
my::LongInt my::operator /(my::LongInt const &_a, unsigned char const b)
{
    unsigned int digit = Pow(2, CHAR_BIT);
    LongInt retVal;
    unsigned int r = 0;
    unsigned int help;
    for (int i = _a.number.GetSize() - 1; i >= 0; i--){
        help = _a.number[i] + r * digit;
        retVal.number[i] = help / b;
        r = help % b;
    }
    retVal.DelZero();
    return retVal;
}