Нужен алгоритм сложения и умножения двоичных чисел - C#

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

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

Необходимо написать программу с описанием простейшего класса со следующими элементами: полями, конструкторами, свойствами. Описать класс для работы со строкой, позволяющей хранить только двоичное число и выполнять с ним арифметические операции (минимум сложение и умножение). Предусмотреть инициализацию с проверкой допустимости значений. В случае недопустимых значений выбрасываются исключения.

Мне нужен алгоритм сложения и умножения двоичных чисел.

Перевод в десятичное число >> работа с десятичным числом >> перевод обратно в двоичное - такой вариант не подходит. Причем числа могут быть разной длины, например, 11011010101 и 1001011. Классы уже написал, ошибки, думаю, сложности не составят. Заранее благодарен.

Решение задачи: «Нужен алгоритм сложения и умножения двоичных чисел»

textual
Листинг программы
using System;
using System.Collections;
using System.Linq;
 
namespace ConsoleApplication34
{
    public class BinaryNumber
    {
        BitArray number;
 
        public int Length { get { return number.Length; } }
        public BitArray Bits { get { return (BitArray)number.Clone(); } }
 
        public BinaryNumber(string value)
        {
            number = new BitArray(value.Select(x => x == '1').ToArray());
        }
 
        public BinaryNumber(BitArray value)
        {
            number = new BitArray(value);
        }
 
        public override string ToString()
        {
            var result = string.Empty;
            for (int i = 0; i < number.Length; i++)
                result += number[i] == true ? "1" : "0";
            return result;
        }
 
        static BinaryNumber Equalize(BinaryNumber n1, int length)
        {
            if (n1.Bits.Length >= length) return n1;
 
            var result = new BitArray(length);
            var source = n1.Bits;
            var offset = length - source.Length;
 
            for (int i = length - 1; i >= offset; i--)
                result[i] = source[i - offset];
 
            return new BinaryNumber(result);
        }
 
        public static BinaryNumber operator +(BinaryNumber n1, BinaryNumber n2)
        {
            var n1Norm = Equalize(n1, n2.Length);
            var n2Norm = Equalize(n2, n1.Length);
            return new BinaryNumber(n1Norm.Bits.Or(n2Norm.Bits));
        }
 
        public static BinaryNumber operator *(BinaryNumber n1, BinaryNumber n2)
        {
            var n1Norm = Equalize(n1, n2.Length);
            var n2Norm = Equalize(n2, n1.Length);
            return new BinaryNumber(n1Norm.Bits.And(n2Norm.Bits));
        }
 
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            BinaryNumber n1 = new BinaryNumber("110101011");
            BinaryNumber n2 = new BinaryNumber("1110111");
 
            Console.WriteLine(n1 + n2);
            Console.WriteLine(n1 * n2);
 
            Console.ReadKey(true);
        }
    }
}

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


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

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

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