Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 07.11.2020
Сообщений: 9

Умножение в двоичной системе

27.05.2021, 22:25. Показов 7198. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Умножение в двоичной системе без перевода в десятичную,в отдельной функции сделать умножение,сделал только шаблон на проверку правильности ввода а умножение не могу,не понимаю(нужно сделать именно свою функцию).
Python
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
def is_system(number_one, sec_number):
    count1 = 0
    count2 = 0
    for char in number_one:
        for i in range(len(number_one)):
            if char in "01":  # проверка на принадлежность нужной системе
                count1 += 1
                break
    for char in sec_number:
        for i in range(len(sec_number)):
            if char in "01":  # проверка на принадлежность нужной системе
                count2 += 1
                break
    if count1 == len(number_one) and count2 == len(sec_number):  # все ли цифры прошли проверку
        return True
    else:
        return False
 
 
def operation(number_one, sec_number):
 
    pass
 
 
def main():
    number_one = input("Enter your first number in binary system: ")
    sec_number = input("Enter your second number in binary system: ")
    if is_system(number_one, sec_number):
        number_one = str(operation(number_one, sec_number))
        return number_one
    else:
        return "You entered incorrect data"
 
 
out = 1
while out != 0:
    print(main())
    print("\nDo you want to continue? 1 - yes, 0 - no\n")
    out = int(input())
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2021, 22:25
Ответы с готовыми решениями:

Вводится число в двоичной системе счисления
Можете помочь? Вводится число в двоичной системе счисления. Вывести 8-ые, десятичные и 16-ые эквиваленты (число 10101, -111101, 11110100)

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

Дан код в двоичной системе, перевести в десятичную
дан код в двоичной системе перевести в десятичную ввод 10001001010 3 4 2// кол во разрядов которыми зашифровано каждое число ...

10
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
27.05.2021, 23:03
Какая то лютая проверка. И зачем туда посылать два числа, если можно послать каждое по отдельности?
Python
1
2
3
4
5
6
7
8
9
10
def is_system(num):
   for i in num:
      if i not in '01':
         return False
   return True
 
#...
 
if not is_system(number_one) or not is_system(sec_number):
   #...
По сабжу - перемножать бинари "вручную" оперируя строками - геморрой.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
28.05.2021, 08:19
Shonistro, Вот мой вариант функции умножения.
Python
1
2
3
4
5
6
7
8
def bin_mul(m, n):
    return bin(int(m, 2) * int(n, 2))
 
if __name__ == '__main__':
    a = '0b101'    # 5
    b = '0b11'     # 3
 
    print(bin_mul(a, b))     # '0b1111' -> 15
Для больших чисел проверьте сами. Если работает, то используйте в своем коде переписав со своими переменными.
Возвращаемый функцией объект является строкой. Поэтому использовать к возвращаемому значению функцию str() не нужно.
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
28.05.2021, 08:22
Viktorrus,
Цитата Сообщение от Shonistro Посмотреть сообщение
Умножение в двоичной системе без перевода в десятичную
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
28.05.2021, 09:22
Цитата Сообщение от Shonistro Посмотреть сообщение
Умножение в двоичной системе без перевода в десятичную
Если внутри функции перевод в десятичную делать нельзя, то я пасс. Извините, с ограничениями на питон, не работаю.

Добавлено через 58 минут
Shonistro, Вот, нашел в интернете сложение двух чисел в виде строк двоичного числа.
Если можем сложить m + m то в цикле повторим n раз и получим умножение m * n .
Python
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
# получить бинарное число в виде массива чисел (бит)
num1 = [*map(int, input("Введите первое число в 2ой системе: "))]
num2 = [*map(int, input("Введите второе число в 2ой системе: "))]
 
# перевернуть числа для удобства выполнения операций
num1 = num1[::-1]
num2 = num2[::-1]
 
# дополнить числа нулями
size = max(len(num1), len(num2))
 
num1 += [0] * (size - len(num1))
num2 += [0] * (size - len(num2))
 
# сложить 2 числа
overflow = 0
res = []
for obj in zip(num1, num2):
    value = obj[0] + obj[1] + overflow
    overflow = value // 2
    res.append(value % 2)
 
# если флаг переполнения установлен - добавить бит в начало нового числа
if overflow == 1:
    res.append(1)
 
# перевернуть число назад
res = res[::-1]
 
print(''.join(map(str, res)))
Но меня здесь смущает то, что нули и единицы преобразуются в десятичные числа.
Интуитивно, я думаю здесь нужно использовать алгоритм сложения, по которому работает с битами компьютер. Как и в этом примере учитывая переполнение и используя дополнительный код с инверсией. Вероятно, что бы как в примере не переводить нули и единицы в десятичные числа и не использовать int(), нужно использовать битовые операции, в том числе & .
Но возится с этим у меня нет желания, по причине, о которой я написал в своем комментарии выше.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.05.2021, 09:25
Цитата Сообщение от Viktorrus Посмотреть сообщение
не переводить нули и единицы в десятичные числа, нуюно использовать битовые операции
Если не переводить нули и единицы в десятичные, то к чему применять битовые операции? К строкам?
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
28.05.2021, 09:39
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Если не переводить нули и единицы в десятичные, то к чему применять битовые операции? К строкам?
К строкам, которые являются двоичными числами и к ним применимы битовые операторы
Python
1
2
>>> bin(5)
'0b101'
Добавляем спереди к введенной строке '101' строку '0b' .
'0b' + '101' , получаем строку '0b101' , которую питон воспринимает как двоичное число. И с такими числами можно использовать битовые операции.

Добавлено через 1 минуту
iSmokeJC, Но это такая морока, что увольте.

Добавлено через 2 минуты
Хотя если предположить, что числа не большие и переполнения разрядности не будет, то может быть код будет не таким громоздким.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.05.2021, 09:40
Цитата Сообщение от Viktorrus
получаем строку '0b101' , которую питон воспринимает как двоичное число
Получаем строку, которую питон воспринимает как строку.
0
Эксперт Python
8839 / 4491 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
28.05.2021, 09:53
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def bin_mult(a, b):
    na, nb = len(a), len(b)
    res = [False] * (na+nb)
    b = [True if d == '1' else False for d in b[::-1]]
    a = [True if d == '1' else False for d in a[::-1]]
    
    for i in range(nb):
        if b[i]:
            t = False
            for j in range(na):
                res[i+j], t = res[i+j]^a[j]^t, (res[i+j]+a[j]+t) > 1
            res[i+j+1] = t 
    tmp = ['1' if d else '0' for d in res[::-1]]
    return ''.join(tmp).lstrip('0')
    
 
num1 = '0000110011100000' #input()
num2 = '10011101000000000000' #input()
res_ab = int(num1,2)*int(num2,2)
ab_mul = bin_mult(num1, num2)
print(ab_mul)
print(int(ab_mul,2))
print(res_ab)
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
28.05.2021, 10:01
Сорри, я ошибся, питон не воспринимает '0b11' как двоичное число.
Двоичное число, это не строка, а 0b11

Добавлено через 4 минуты
В общем пока не вижу как можно обойтись без int().
Может у ТС примут решение, использующее пример, который я взял из интернета?

Добавлено через 1 минуту
О, Gdez, дал решение.
0
Эксперт Python
8839 / 4491 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
28.05.2021, 10:30
Viktorrus, К сожалению не совсем -> не смог "обойти"
Python
1
(res[i+j]+a[j]+t) > 1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2021, 10:30
Помогаю со студенческими работами здесь

Калькулятор для сложения чисел в двоичной системе
Доброго времени суток!!! Поскольку я новичок, помогите пожалуйста, следует написать программу которая бы считала суму цифр в двоичной...

Чему равна сумма чисел? Ответ записать в двоичной системе счисления
Чему равна сумма чисел 578 и 4616? Ответ записать в двоичной системе счисления. помогите на питоне пожалуйста спасибо большое...

В массиве найдите количество элементов, запись которых в двоичной системе – палиндром
Введите массив из 5 элементов с клавиатуры и найдите количество элементов, запись которых в двоичной системе – палиндром (например, 10101...

Дано дробное число в двоичной системе счисления, т.е. последовательность цифр 0 и 1, разделенных точкой. Составить прог
ОДНОМЕРНЫЕ МАССИВЫ! Дано дробное число в двоичной системе счисления, т.е. последовательность цифр 0 и 1, разделенных точкой. Составить...

Python Задан массив чисел в двоичной системе счисления. Упорядочить элементы массива по убыванию. Определить сумму чисел
Задан массив чисел в двоичной системе счисления. Упорядочить элементы массива по убыванию. Определить сумму чисел. Python


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru