Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
 Аватар для SyxaRuk
0 / 0 / 1
Регистрация: 14.11.2013
Сообщений: 51

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

17.11.2013, 14:12. Показов 6540. Ответов 20
Метки нет (Все метки)

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

Мне нужен алгоритм сложения и умножения двоичных чисел.
Перевод в десятичное число >> работа с десятичным числом >> перевод обратно в двоичное - такой вариант не подходит.
Причем числа могут быть разной длины, например, 11011010101 и 1001011.
Классы уже написал, ошибки, думаю, сложности не составят.
Заранее благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.11.2013, 14:12
Ответы с готовыми решениями:

Алгоритм умножения двоичных чисел со сдвигом вправо или влево
По причине низкого уровня в программировании(новичок) НУЖЕН АЛГОРИТМ умножения двоичных чисел со сдвигом вправо или влево!))):) Заранее...

Реализовать алгоритм умножения двоичных чисел со сдвигом суммы частичного произведения вправо
Создать алгоритм умножения чисел с анализом двухразрядных множителей со сдвигом суммы частичного произведения вправо. Заранее спасибо.

Реализовать алгоритм умножения 2 целых чисел с использованием только операций сложения и вычитания
Доброго времени суток, необходимо реализовать алгоритм умножения 2 целых чисел с использованием только операций сложения и вычитания в...

20
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.11.2013, 14:17
Цитата Сообщение от SyxaRuk Посмотреть сообщение
Перевод в десятичное число >> работа с десятичным числом >> перевод обратно в двоичное - такой вариант не подходит.
Разумеется. Ведь с десятичными числами комп вообще не работает.
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
17.11.2013, 14:18
BitArray поможет вам.
0
 Аватар для SyxaRuk
0 / 0 / 1
Регистрация: 14.11.2013
Сообщений: 51
17.11.2013, 14:32  [ТС]
Цитата Сообщение от SyxaRuk Посмотреть сообщение
Описать класс для работы со строкой, позволяющей хранить только двоичное число и выполнять с ним арифметические операции
Цитата Сообщение от freeba Посмотреть сообщение
BitArray поможет вам.
Мне надо самому класс написать, я его написал. Нужен только алгоритм работы именно с двоичным числом. То есть эти числа помещаются в массивы, а там уже класс складывает элементы, умножает.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.11.2013, 14:38
А разве его у тебя нет?

Добавлено через 36 секунд
Класс же ты не написал.
0
 Аватар для SyxaRuk
0 / 0 / 1
Регистрация: 14.11.2013
Сообщений: 51
17.11.2013, 14:46  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
А разве его у тебя нет?

Добавлено через 36 секунд
Класс же ты не написал.
Класс написал:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Binary
{
    private int _value;
    public Binary(string binValue)
    {
        _value = Convert.ToInt32(binValue, 2);
    }
    public static explicit operator Binary(string str)
    {
        return new Binary(str);
    }
    public static implicit operator int(Binary bin)
    {
        return bin._value;
    }
    public override string ToString()
    {
        return _value.ToString();
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("{0}", (Binary)"0010" * (Binary)"0010" + (Binary)"0001");
        }
    }
}
Нужен сам алгоритм, чтобы в класс засунуть
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
17.11.2013, 14:54
Дерзайте
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Collections;
using System.Linq;
 
namespace ConsoleApplication34
{
    public class BinaryNumber
    {
        BitArray number;
 
        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;
        }
 
        public static BinaryNumber operator +(BinaryNumber n1, BinaryNumber n2)
        {
            return new BinaryNumber(n1.Bits.Or(n2.Bits));
        }
 
        public static BinaryNumber operator *(BinaryNumber n1, BinaryNumber n2)
        {
            return new BinaryNumber(n1.Bits.And(n2.Bits));
        }
 
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            BinaryNumber n1 = new BinaryNumber("110101011");
            BinaryNumber n2 = new BinaryNumber("111101111");
 
            Console.WriteLine(n1 + n2);
            Console.WriteLine(n1 * n2);
 
            Console.ReadKey(true);
        }
    }
}
0
 Аватар для SyxaRuk
0 / 0 / 1
Регистрация: 14.11.2013
Сообщений: 51
17.11.2013, 15:26  [ТС]
Цитата Сообщение от freeba Посмотреть сообщение
Дерзайте
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Collections;
using System.Linq;
 
namespace ConsoleApplication34
{
    public class BinaryNumber
    {
        BitArray number;
 
        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;
        }
 
        public static BinaryNumber operator +(BinaryNumber n1, BinaryNumber n2)
        {
            return new BinaryNumber(n1.Bits.Or(n2.Bits));
        }
 
        public static BinaryNumber operator *(BinaryNumber n1, BinaryNumber n2)
        {
            return new BinaryNumber(n1.Bits.And(n2.Bits));
        }
 
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            BinaryNumber n1 = new BinaryNumber("110101011");
            BinaryNumber n2 = new BinaryNumber("111101111");
 
            Console.WriteLine(n1 + n2);
            Console.WriteLine(n1 * n2);
 
            Console.ReadKey(true);
        }
    }
}
Вод чисел производится с клавиатуры
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
17.11.2013, 15:41
Цитата Сообщение от SyxaRuk Посмотреть сообщение
Вод чисел производится с клавиатуры
А в чем проблема? Console.ReadLine() - уже не в моде?
0
 Аватар для SyxaRuk
0 / 0 / 1
Регистрация: 14.11.2013
Сообщений: 51
17.11.2013, 15:49  [ТС]
Цитата Сообщение от freeba Посмотреть сообщение
А в чем проблема? Console.ReadLine() - уже не в моде?
Прога выводит теже числа, но не считает
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
17.11.2013, 15:56
А у меня считает

PS: Приведите пример, который не работает.
0
 Аватар для SyxaRuk
0 / 0 / 1
Регистрация: 14.11.2013
Сообщений: 51
17.11.2013, 16:06  [ТС]
Цитата Сообщение от freeba Посмотреть сообщение
Кликните здесь для просмотра всего текста
Код C#1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 using System; using System.Collections; using System.Linq; namespace ConsoleApplication34 { public class BinaryNumber { BitArray number; 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; } public static BinaryNumber operator +(BinaryNumber n1, BinaryNumber n2) { return new BinaryNumber(n1.Bits.Or(n2.Bits)); } public static BinaryNumber operator *(BinaryNumber n1, BinaryNumber n2) { return new BinaryNumber(n1.Bits.And(n2.Bits)); } } class Program { static void Main(string[] args) { BinaryNumber n1 = new BinaryNumber("110101011"); BinaryNumber n2 = new BinaryNumber("111101111"); Console.WriteLine(n1 + n2); Console.WriteLine(n1 * n2); Console.ReadKey(true); } } }
Вот результат, да ещё и числа надо вводить только одинаковой длины
Миниатюры
Нужен алгоритм сложения и умножения двоичных чисел  
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
17.11.2013, 16:23
Ну и? Все правильно считает.
Цитата Сообщение от SyxaRuk Посмотреть сообщение
и числа надо вводить только одинаковой длины
Дописать метод из 15 строчек для выравнивания чисел - это неподъемная задача? А кто то бил себя пяткой в грудь и требовал только алгоритм
Цитата Сообщение от SyxaRuk Посмотреть сообщение
Мне нужен алгоритм сложения и умножения двоичных чисел.
0
 Аватар для SyxaRuk
0 / 0 / 1
Регистрация: 14.11.2013
Сообщений: 51
17.11.2013, 16:29  [ТС]
Цитата Сообщение от freeba Посмотреть сообщение
Ну и? Все правильно считает.

Дописать метод из 15 строчек для выравнивания чисел - это неподъемная задача? А кто то бил себя пяткой в грудь и требовал только алгоритм
Я сразу просил алгоритм с дополнением недостающих элементов, я не понимаю как это сделать.
А по поводу операций, программа не работает, она выводит введенные числа и все, точнее она складывает как десятичные, а мне надо с переносом разряда в старший бит
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
17.11.2013, 16:35
Цитата Сообщение от SyxaRuk Посмотреть сообщение
Я сразу просил алгоритм с дополнением недостающих элементов, я не понимаю как это сделать.
Лентяй.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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);
        }
    }
}
Цитата Сообщение от SyxaRuk Посмотреть сообщение
программа не работает, она выводит введенные числа и все
Попробуйте "1010101" и "0101010" - их сумма будет из единиц, а произведение из нулей.
0
 Аватар для SyxaRuk
0 / 0 / 1
Регистрация: 14.11.2013
Сообщений: 51
17.11.2013, 16:44  [ТС]
Цитата Сообщение от freeba Посмотреть сообщение
Лентяй.
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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);
        }
    }
}


Попробуйте "1010101" и "0101010" - их сумма будет из единиц, а произведение из нулей.
Ладно, спасибо, все равно не то, что надо
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
17.11.2013, 17:03
То, что надо?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public static BinaryNumber operator +(BinaryNumber n1, BinaryNumber n2)
        {
            var n1Norm = Equalize(n1, n2.Length).Bits;
            var n2Norm = Equalize(n2, n1.Length).Bits;
            var result = new BitArray(Math.Max(n1.Length, n2.Length) + 1);
 
            var flag = false;
            for (int i = result.Length - 2; i >= 0; i--)
            {
                if (n1Norm[i] == true && n2Norm[i] == true && !flag) { result[i] = false; flag = true; }
                if (n1Norm[i] == true && n2Norm[i] == true && flag) { result[i] = true; flag = true; }
 
                if (n1Norm[i] == true && n2Norm[i] == false && !flag) { result[i] = true; flag = false; }
                if (n1Norm[i] == true && n2Norm[i] == false && flag) { result[i] = false; flag = true; }
 
                if (n1Norm[i] == false && n2Norm[i] == true && !flag) { result[i] = true; flag = false; }
                if (n1Norm[i] == false && n2Norm[i] == true && flag) { result[i] = false; flag = true; }
 
                if (n1Norm[i] == false && n2Norm[i] == false && !flag) { result[i] = false; flag = false; }
                if (n1Norm[i] == false && n2Norm[i] == false && flag) { result[i] = true; flag = false; }
            }
 
            if (flag) result[0] = true;
 
            return new BinaryNumber(result);
        }
0
 Аватар для SyxaRuk
0 / 0 / 1
Регистрация: 14.11.2013
Сообщений: 51
17.11.2013, 17:43  [ТС]
freeba,
Да, но там ошибка, щас поищу спасибо.
0
dangerpwz
10.12.2013, 21:17
SyxaRuk, привет, продвинулось написание программы? Если да, то скинь, пожалуйста, последний вариант кода
10.12.2013, 21:22  [ТС]

Не по теме:

dangerpwz, к сожалению так ине помогло:cry: забросил эту задачу, решаю другую - задача поиска максимального потока

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.12.2013, 21:22
Помогаю со студенческими работами здесь

Устройство сложения 4-х разрядных двоичных чисел
Здравствуйте, проблема следующая Необходимо разработать устройство, позволяющее производить сложение четырехразрядных двоичных чисел....

Моделирование сложения целых двоичных чисел в АЛУ
Очень нужно написать программу, но к своему стыду, не знаю как. Уже всё позабывала в Delphi:cry: Если кто то сможет помочь, я буду искрене...

Схема умножения двоичных чисел
помогите плиз кто чем может. вопрос в билетах: схема для умножения двоичных чисел.

Результатом операции сложения двоичных чисел 101+11 является
Подскажите ответ!

Написать программу сложения двух 32-разрядных двоичных чисел
День добрый, подскажите почему не могу посмотреть конечный результат(окно закрывается) и почему в конце работы программы выдает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru