Ejemplo n.º 1
0
 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;
        }
Ejemplo n.º 5
0
        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());
 }
Ejemplo n.º 13
0
 public abstract bool Add(DirectBinaryNumber number);