public override DirectBinaryNumber ToBinaryNumber() { ManagerTranslatePNS.AddMessageTranslate(PNS.Decimal, PNS.Binary); //так как максимальное число в 2-ой системе 11111111, то максимальная длина массива 8 char[] coding = getCodingPNS(_code, 2, 8); DirectBinaryNumber numb = new DirectBinaryNumber(coding); return numb; }
/// <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); } }
public ReversBinaryNumber(DirectBinaryNumber directNumber) { Char[] CharDirectNumb = directNumber.Code; if (CharDirectNumb[0].Equals('1')) { _code[0] = CharDirectNumb[0];//знак тот же for (byte i = 1; i <= 7; i++) _code[i] = (CharDirectNumb[i].Equals('0')) ? '1' : '0'; } else _code = CharDirectNumb; }
public override DirectBinaryNumber ToBinaryNumber() { ManagerTranslatePNS.AddMessageTranslate(PNS.Fourfould, PNS.Binary); StringBuilder binaryCoding = new StringBuilder(); for (int i = 0; i < 4; i++) { switch (_code[i]) { case '0': binaryCoding.Append("00"); ManagerTranslatePNS.AddMessageTranslatePartNumber("0", "00"); break; case '1': binaryCoding.Append("01"); ManagerTranslatePNS.AddMessageTranslatePartNumber("1", "01"); break; case '2': binaryCoding.Append("10"); ManagerTranslatePNS.AddMessageTranslatePartNumber("2", "10"); break; case '3': binaryCoding.Append("11"); ManagerTranslatePNS.AddMessageTranslatePartNumber("3", "11"); break; } } DirectBinaryNumber number = new DirectBinaryNumber(binaryCoding.ToCharArray());//ВОзвращаем в прямом коде return number; }
public override DirectBinaryNumber ToBinaryNumber() { ManagerTranslatePNS.AddMessageTranslate(PNS.Octal, PNS.Binary); StringBuilder binaryCoding = new StringBuilder(); for (int i = 0; i < 3; i++) { switch (_code[i]) { case '0': binaryCoding.Append("000"); ManagerTranslatePNS.AddMessageTranslatePartNumber("0", "000"); break; case '1': binaryCoding.Append("001"); ManagerTranslatePNS.AddMessageTranslatePartNumber("1", "001"); break; case '2': binaryCoding.Append("010"); ManagerTranslatePNS.AddMessageTranslatePartNumber("2", "010"); break; case '3': binaryCoding.Append("011"); ManagerTranslatePNS.AddMessageTranslatePartNumber("3", "011"); break; case '4': binaryCoding.Append("100"); ManagerTranslatePNS.AddMessageTranslatePartNumber("4", "100"); break; case '5': binaryCoding.Append("101"); ManagerTranslatePNS.AddMessageTranslatePartNumber("5", "101"); break; case '6': binaryCoding.Append("110"); ManagerTranslatePNS.AddMessageTranslatePartNumber("6", "110"); break; case '7': binaryCoding.Append("111"); ManagerTranslatePNS.AddMessageTranslatePartNumber("7", "111"); break; } } binaryCoding.Remove(0, 1); DirectBinaryNumber number = new DirectBinaryNumber(binaryCoding.ToCharArray()); return number; }
/// <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(); }
/// <summary> /// Вычитание из бинарного числа в прямом коде бинарного числа в прямом коде /// </summary> /// <param name="number">Число, которое вычитается из данного</param> /// <returns>При переполнении возвращает false, иначе true</returns> public bool Sub(DirectBinaryNumber number) { number.reversSign(); return Add(number); }
/// <summary> /// Сравнение чисел по модулю /// </summary> /// <param name="number">Число которое сравнивается с данным</param> /// <returns>true, если данное число больше чем number, иначе - false</returns> public bool MoreModule(DirectBinaryNumber number) { sbyte byteA = this.ToSByte(); sbyte byteB = number.ToSByte(); sbyte absByteA = Math.Abs(byteA); sbyte absByteB = Math.Abs(byteB); bool result = (absByteA > absByteB) ? true : false; return result; }
public override DirectBinaryNumber ToBinaryNumber() { ManagerTranslatePNS.AddMessageTranslate(PNS.Hexadecimal, PNS.Binary); StringBuilder tempStrCode = new StringBuilder(); for (int i = 0; i < 2; i++) { switch (_code[i]) { case '0': tempStrCode.Append("0000"); ManagerTranslatePNS.AddMessageTranslatePartNumber("0", "0000"); break; case '1': tempStrCode.Append("0001"); ManagerTranslatePNS.AddMessageTranslatePartNumber("1", "0001"); break; case '2': tempStrCode.Append("0010"); ManagerTranslatePNS.AddMessageTranslatePartNumber("2", "0010"); break; case '3': tempStrCode.Append("0011"); ManagerTranslatePNS.AddMessageTranslatePartNumber("3", "0011"); break; case '4': tempStrCode.Append("0100"); ManagerTranslatePNS.AddMessageTranslatePartNumber("4", "0100"); break; case '5': tempStrCode.Append("0101"); ManagerTranslatePNS.AddMessageTranslatePartNumber("5", "0101"); break; case '6': tempStrCode.Append("0110"); ManagerTranslatePNS.AddMessageTranslatePartNumber("6", "0110"); break; case '7': tempStrCode.Append("0111"); ManagerTranslatePNS.AddMessageTranslatePartNumber("7", "0111"); break; case '8': tempStrCode.Append("1000"); ManagerTranslatePNS.AddMessageTranslatePartNumber("8", "1000"); break; case '9': tempStrCode.Append("1001"); ManagerTranslatePNS.AddMessageTranslatePartNumber("9", "1001"); break; case 'A': tempStrCode.Append("1010"); ManagerTranslatePNS.AddMessageTranslatePartNumber("A", "1010"); break; case 'B': tempStrCode.Append("1011"); ManagerTranslatePNS.AddMessageTranslatePartNumber("B", "1011"); break; case 'C': tempStrCode.Append("1100"); ManagerTranslatePNS.AddMessageTranslatePartNumber("C", "1100"); break; case 'D': tempStrCode.Append("1101"); ManagerTranslatePNS.AddMessageTranslatePartNumber("D", "1101"); break; case 'E': tempStrCode.Append("1110"); ManagerTranslatePNS.AddMessageTranslatePartNumber("E", "1110"); break; case 'F': tempStrCode.Append("1111"); ManagerTranslatePNS.AddMessageTranslatePartNumber("F", "1111"); break; } } DirectBinaryNumber number = new DirectBinaryNumber(tempStrCode.ToString().ToCharArray()); return number; }
public override bool Add(DirectBinaryNumber number) { return Add(number.ToAdditionalBinaryNumber()); }
/// <summary> /// Сложение бинарного числа в обратном коде с бинарным числом в прямом коде /// </summary> /// <param name="number">Число, которое прибавляется к данному</param> /// <returns>При переполнении возвращает false, иначе true</returns> public override bool Add(DirectBinaryNumber number) { return Add( number.ToReversBinaryNumber()); }
public abstract bool Add(DirectBinaryNumber number);