/// <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);