/// <summary>
 /// Конструктор класса
 /// </summary>
 /// <param name="reversBinaryNumber">Бинарное число в обратном коде</param>
 public AdditionalBinaryNumber(ReversBinaryNumber reversBinaryNumber)
 {
     if (reversBinaryNumber.Sign() == '0')
         this._code = reversBinaryNumber.Code;
     else
     {
         this._code = reversBinaryNumber.Code;
         Increment();
     }
 }
        /// <summary>
        /// Конструктор класса
        /// </summary>
        /// <param name="reversBinaryNumber">Бинарное число в прямом коде</param>
        public AdditionalBinaryNumber(DirectBinaryNumber dirBinNumb)
        {
            if (dirBinNumb.Sign() == '0')
                this._code = dirBinNumb.Code;
            else
            {
                char[] revCode = new ReversBinaryNumber(dirBinNumb).Code;
                char[] one  = new[] {'0','0','0','0','0','0','0','1'};

                this._code = Additional(revCode, one);
            }
        }
        /// <summary>
        /// Сложение бинарного числа в обратном коде с бинарным числом в обратном коде
        /// </summary>
        /// <param name="number">Число, которое прибавляется к данному</param>
        /// <returns>При переполнении возвращает false, иначе true</returns>
        public override bool Add(ReversBinaryNumber number)
        {
            int transfer = 0;

            char[] result = Additional(this._code, number.Code, out transfer);//Если был перенос, transfer = 1

            if (transfer == 1)
                result = Additional(result, new ReversBinaryNumber(1).Code, out transfer);//прибавляем единицу к младшему разряду

            bool hasOv = hasOverflow(this.Sign(), number.Sign(), result[0]);

            if (!hasOv)//или добавить выброс исключения при переполнении
                _code = result;

            return !hasOv;
        }
 /// <summary>
 /// Сложение бинарного числа в прямом коде с бинарным числом в обратном коде
 /// </summary>
 /// <param name="number">Число, которое прибавляется к данному</param>
 /// <returns>При переполнении возвращает false, иначе true</returns>
 public override bool Add(ReversBinaryNumber number)
 {
     return Add(number.ToDirectBinaryNumber());
 }
 public override bool Add(ReversBinaryNumber number)
 {
     return Add(number.ToAdditionalBinaryNumber());
 }
 public abstract bool Add(ReversBinaryNumber number);