Нужен алгоритм сложения и умножения двоичных чисел - 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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д