Создать класс для работы с двоичными числами реализовать в нем операцию сложения, умножения, вычитания - C#

Узнай цену своей работы

Формулировка задачи:

создать класс для работы с двоичными числами реализовать в нем операцию сложения умнежения вычитания

Решение задачи: «Создать класс для работы с двоичными числами реализовать в нем операцию сложения, умножения, вычитания»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
 
namespace ConsoleApplication157
{
    class Program
    {
 
        public static void Main(string[] args)
        {
            var n1 = new Bin("1011");
            var n2 = new Bin("1101");
 
            Console.WriteLine(n1 + n2);
            Console.WriteLine(n2 - n1);
            Console.WriteLine(n1 * n2);
 
            Console.ReadLine();
        }
    }
 
    /// <summary>
    /// Binary number
    /// </summary>
    class Bin
    {
        /// <summary>
        /// Bits of number, from lower to higher
        /// </summary>
        private List<int> bits = new List<int>();
 
        Bin()
        {
        }
 
        public Bin(string str)
        {
            foreach (var c in str.Reverse())
                bits.Add(c=='1' ? 1 : 0);
        }
 
        public Bin Clone()
        {
            return new Bin() {bits = new List<int>(bits)};
        }
 
        public int this[int index]
        {
            get { return index >= bits.Count ? 0 : bits[index]; }
        }
 
        public int Length { get { return bits.Count; } }
 
        /// <summary>
        /// Shifts number left (equal mult by 2^shift)
        /// </summary>
        public static Bin operator <<(Bin n, int shift)
        {
            var res = n.Clone();
            res.bits.InsertRange(0, new int[shift]);
            return res;
        }
 
        /// <summary>
        /// Shifts number right (equal div by 2^shift)
        /// </summary>
        public static Bin operator >>(Bin n, int shift)
        {
            var res = n.Clone();
            res.bits.RemoveRange(0, shift);
            return res;
        }
 
        /// <summary>
        /// Sum of binary numbers
        /// </summary>
        public static Bin operator +(Bin n1, Bin n2)
        {
            var c = Math.Max(n1.Length, n2.Length);
            var rest = 0;
            var res = new Bin();
 
            for(int i=0;i<c;i++)
            {
                var n = n1[i] + n2[i] + rest;
                rest = n >> 1;
                res.bits.Add(n & 0x01);
            }
 
            if (rest > 0)
                res.bits.Add(1);
 
            return res;
        }
 
        /// <summary>
        /// Diff of binary numbers
        /// </summary>
        public static Bin operator -(Bin n1, Bin n2)
        {
            var c = Math.Max(n1.Length, n2.Length);
            var rest = 0;
            var res = new Bin();
 
            for (int i = 0; i < c; i++)
            {
                var n = n1[i] - n2[i] - rest;
                rest = n < 0 ? 1 : 0;
 
                res.bits.Add(n < 0 ? 1 : n);
            }
 
            if (rest > 0)
                throw new Exception("Result less 0");
 
            return res;
        }
 
        /// <summary>
        /// Mult of binary numbers
        /// </summary>
        public static Bin operator *(Bin n1, Bin n2)
        {
            var res = new Bin();
 
            for (int i = 0; i < n2.Length; i++)
            {
                if (n2[i] == 1)
                    res = res + n1;
                n1 = n1 << 1;
            }
 
            return res;
        }
 
        public override string ToString()
        {
            var sb = new StringBuilder();
            for (int i = Length - 1; i >= 0; i--)
                sb.Append(bits[i] == 1 ? '1' : '0');
 
            return sb.ToString().TrimStart('0');
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы