/// <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(DirectBinaryNumber number) { if (this.Sign() == number.Sign()) //Знаки одинаковые - складываем { int transfer = 0; char[] result = Additional(_code, number.Code, out transfer);//Складываем if (transfer != 1) _code = result; else return false; } else //Знаки разные - Вычитаем { if (this.MoreModule(number)) //Находим большее по модулю число _code = Substraction(_code, number.Code); //Из первого вычитаем второе else _code = Substraction(number.Code, _code); //Из второго вычитаем первое _code[0] = this.signOfNumberMoreByModule(number, this);// Получаем знак результата } return true; }
/// <summary> /// Знак числа большего по модулю /// </summary> /// <param name="number1">Число 1</param> /// <param name="number2">Число 2</param> /// <returns>Знак числа большего по модулю, если числа равны то возвращает знак второго</returns> private char signOfNumberMoreByModule(DirectBinaryNumber number1, DirectBinaryNumber number2) { if (number1.MoreModule(number2)) return number1.Sign(); else return number2.Sign(); }