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