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