Сложение двоичной системы python

Двоичные числа в Python

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

10 ответов

Вы можете конвертировать строковое представление двоичного файла, используя bin() и int()

>>> bin(88) '0b1011000' >>> int('0b1011000', 2) 88 >>> >>> a=int('01100000', 2) >>> b=int('00100110', 2) >>> bin(a & b) '0b100000' >>> bin(a | b) '0b1100110' >>> bin(a ^ b) '0b1000110' 

Я думаю, вы не понимаете, что такое двоичный файл. Двоичные и десятичные числа — это просто разные представления числа — например, 101 основание 2 и 5 основание 10 — это одно и то же число. Операции сложения, вычитания и сравнения работают с числами — 101 основание 2 == 5 основание 10, а сложение — это одна и та же логическая операция, независимо от того, на какой базе вы работаете. Тот факт, что ваш интерпретатор Python может хранить вещи как двоичные файлы, внутренне не влияет на работу с ним — если у вас есть целочисленный тип, просто используйте +, — и т. д.

Если у вас есть строки двоичных цифр, вам придется либо написать собственную реализацию, либо преобразовать их с помощью функции int(binaryString, 2).

Если вы говорите о побитовых операторах, то вы после:

В противном случае двоичные числа работают точно так же, как и десятичные числа, потому что числа — это числа, независимо от того, как вы на них смотрите. Единственная разница между десятичной и двоичной кодами заключается в том, как мы представляем эти данные, когда смотрим на них.

Читайте также:  Все коды программирования html

Источник

Сложение двоичной системы python

Особый класс операций представляют поразрядные операции. Они выполняются над отдельными разрядами чисел типа int. Но чтобы понять природу поразрядных операций, надо понимать что вообще представляет число в двоичном представление.

Двоичное представление чисел

При двоичной системе каждый разряд числа может иметь только два значения — 0 и 1. Например, 0 в десятичной системе также будет равен 0 в двоичной системе, а 1 в десятичной системе будет соответствовать 1 в двоичной системе. Следующее число в десятичной системе — 2 в двоичной системе будет соответствовать 10. То есть, когда мы к 1 прибавляем 1, то результатом будет 10. И так далее.

Например, 5 в двоичном представлении 101 и имеет три разряда. Для вывода десятичного числа в двоичной системе можно применять спецификатор 0b :

number = 5 # в двоичной форме 101 print(f"number = ") # number = 101

Без указания спецификатора функция print() выводит число в десятичной системе.

При этом Python позволяет сразу определять число в двоичной форме. Для этого число в двоичной форме указывается после префикса 0b :

number = 0b101 # определяем число в двоичной форме print(f"number = ") # number = 101 print(f"number = ") # number = 5 - в десятичной системе

Еще несколько примеров сопоставления между двоичной и десятичной системами:

number1 = 1 # в двоичной системе 0b1 number2 = 2 # в двоичной системе 0b10 number3 = 3 # в двоичной системе 0b11 number4 = 4 # в двоичной системе 0b100 number5 = 5 # в двоичной системе 0b101 number6 = 6 # в двоичной системе 0b110

Логические операции

Логические операции выполняются над отдельными разрядами числа. В Python есть следующие логические операции:

    & (логическое умножение) Умножение производится поразрядно, и если у обоих операндов значения разрядов равно 1, то операция возвращает 1, иначе возвращается число 0. Например:

x1 = 2 # 010 y1 = 5 # 101 z1 = x1 & y1 print(f"z1 = ") # z1 = 0 x2 = 4 # 100 y2 = 5 # 101 z2 = x2 & y2 print(f"z2 = ") # z2 = 4 print(f"z2 = ") # z2 = 100
x1 = 2 # 010 y1 = 5 # 101 z1 = x1|y1 # 111 print(f"z1 = ") # z1 = 7 print(f"z1 = ") # z1 = 111 x2 = 4 # 100 y2 = 5 # 101 z2 = x2 | y2 # 101 print(f"z2 = ") # z2 = 5 print(f"z2 = ") # z2 = 101
x = 9 # 1001 y = 5 # 0101 z = x ^ y # 1100 print(f"z = ") # z = 12 print(f"z = ") # z = 1100

Здесь число 9 в двоичной форме равно 1001. Число 5 равно 0101. Операция XOR дает следующий результат: 1^0, 0^1, 0^0, 1^1. Здесь мы видим, что первые два разряда чисел содержат разные значения, поэтому первые два разряда получат значение 1. А последние два разряда чисел содержат одинаковые значения, поэтому последние два разряда получат значение 0. Таким образом, мы получаем число 1100 или 12 в десятичной системе. нередко данную операцию применяют для простого шифрования:

x = 45 # Значение, которое надо зашифровать - в двоичной форме 101101 key = 102 # Пусть это будет ключ - в двоичной форме 1100110 encrypt = x ^ key # Результатом будет число 1001011 или 75 print(f"Зашифрованное число: ") decrypt = encrypt ^ key # Результатом будет исходное число 45 print(f"Расшифрованное число: ")
x = 9 # 1001 y = 5 # 0101 x = x ^ y y = x ^ y x = x ^ y print(f"x = ") # x = 5 print(f"y = ") # y = 9

Операции сдвига

Операции сдвига также производятся над разрядами чисел. Сдвиг может происходить вправо и влево.

Таким образом, если исходное число, которое надо сдвинуть в ту или другую строну, делится на два, то фактически получается умножение или деление на два. Поэтому подобную операцию можно использовать вместо непосредственного умножения или деления на два. Например:

a = 16 # в двоичной форме 10000 b = 2 c = a > b #Сдвиг числа 10000 вправо на 2 разряда, равно 100 или 4 в десятичной системе print(d) #4

При этом числа, которые участвую в операциях, необязательно должны быть кратны 2::

a = 22 # в двоичной форме 10110 b = 2 c = a > b # Сдвиг числа 10110 вправо на 2 разряда, равно 101 или 5 в десятичной системе print(d) # 5

Источник

Сложение двоичных чисел в строковой форме

Помогите, пожалуйста, написать программу на Python. не понимаю, как написать сам цикл подсчета
Ввести две строки, состоящие только из нулей и единиц. Считая их изображениями двоичных чисел, сложить их и вывести сумму на экран в двоичной и десятичной системах счисления. Исходные слагаемые в десятичную систему счисления не преобразовывать.
Вот, что я начал:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
print('\nВвод исходных данных') str1 = '100101' #input('Введите строку символов:') str2 = '0111' #input('Введите строку символов:') print("Введена строка: ", str1) print("Введена строка: ", str2) n = len(str1) # определение длины строки m = len(str2) print(n, m) k = n - m #for i in range(m, 0, -1): #if str2[i] == 1: #while str1[i+k] == 1:

Сложение двоичных чисел
Катерина хочет научить братика складывать двоичные числа. Чтобы складывать было легче, она.

Python, сложение и вычитание двоичных чисел в обратном коде
Интересует алгоритм сложения и вычитания чисел в обратном коде(длина-8символов) Осуществлять.

Найдите сумму двоичных чисел, заданных в естественной форме. Сложение выполните в обратном коде
Найдите сумму двоичных чисел, заданных в естественной форме. Сложение выполните в обратном коде.

Сложение двоичных чисел
нужно сложить 3 двоичных числа 11111+11000+11100 что-то я мучаюсь но ничего неполучается у меня.

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

Эксперт функциональных языков программированияЭксперт Python

Лучший ответ

Сообщение было отмечено artoym_rd как решение

Решение

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
def bin_add(b1,b2): lb1=len(b1) lb2=len(b2) if lb1 > lb2: b2='0'*(lb1-lb2)+b2 if lb2 > lb1: b1='0'*(lb2-lb1)+b1 lb1=lb2 p=0 r="" for i in range(-1,-lb1-1,-1): x1=int(b1[i]) x2=int(b2[i]) x=x1+x2+p r=str(x%2)+r p=x//2 if p !=0: r=str(p)+r return r def fromBin(b): acc=0 for a in b: acc=acc*2+int(a) return acc b1=input("b1=") b2=input("b2=") print("В двоичной системе:",b1,"+",b2,"=",bin_add(b1,b2)) d1=fromBin(b1) d2=fromBin(b2) print("В десятичной системе:",d1,"+",d2,"=",d1+d2)
from itertools import zip_longest def bin_add1(b1, b2): p = 0 r = '' for i, j in zip_longest(b1[::-1], b2[::-1], fillvalue='0'): p, d = divmod(int(i) + int(j) + p, 2) r = str(d) + r if p: r = str(p) + r return r

Эксперт функциональных языков программированияЭксперт Python

Vigilant Mole, а в чем состоит «по-другому»? В том, что я выравниваю длины вручную, а ты делаешь это стандартной функцией? А алгоритм тот же самый.

Источник

Калькулятор для сложения чисел в двоичной системе

Доброго времени суток. Поскольку я новичок, помогите пожалуйста, следует написать программу которая бы считала суму цифр в двоичной системе счисления т.е. я ввожу два числа в 10 системе счисления — перевожу в двоичную систему счисления и считаю их суму,при этом нельзя использовать стандартные функции т.е. нужно самому написать функцию для сложения
Помогите со сложением пожалуйста

1 2 3 4 5 6 7 8 9 10 11 12 13 14
num22='' num11='' num1=int(input('Type num1:')) num2=int(input('Type num2:')) while num1>0: num11=str(num1%2)+num11 num1//=2 while num2>0: num22=str(num2%2)+num22 num2//=2 num1=num11 num2=num22 print(num1) print(num2)

Это только для перевода чисел,а дальше не знаю как записать ,хотел сделать через строки но не знаю как записать.надеюсь на вашу помощь.

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

Написать внешний модуль для вычисления результата сложения двух чисел в двоичной системе
2. Написать внешний модуль для вычисления результата сложения двух чисел в двоичной системе. В.

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

Как создать Программа-калькулятор для чисел в двоичной системе счисления
Программа-калькулятор для чисел в двоичной системе счисления

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
a = bin(int(input('a = ')))[2:] b = bin(int(input('b = ')))[2:] a = list(reversed(list(map(int, a)))) b = list(reversed(list(map(int, b)))) lena = len(a) lenb = len(b) # c = [0 for i in range(lena)] # для переполнения c = [0 for i in range(lena + 1)] p = False # вариант с переполнением for i, bita in enumerate(a): bitb = b[i] add = bita + bitb + c[i] if add  2: c[i] = add else: c[i] = 0 c[i + 1] = 1 # if i < lena - 1:# c[i+1] = 1 # else: # p = True c = list(reversed(c)) print(p) print(int(''.join(map(str, c)), 2))

Добавлено через 37 минут
Можно zip с дефолтом использовать для удобства, т.к. данный код работает только для чисел, у которых двоичное представление имеет одинаковую длину.

ЦитатаСообщение от RikiCat Посмотреть сообщение

Arsegg, это была лишь идея. Полагаю, что списки им можно использовать, а как ТС будет это делать, это уже его дело.

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
from itertools import zip_longest def binary(n): def _binary(_n): q, r = divmod(_n, 2) return _binary(q) + (r,) if _n > 0 else tuple() return _binary(n) or (0,) def add_binary(a, b): result = [] r = 0 for i, j in zip_longest(reversed(a), reversed(b), fillvalue=0): r, s = divmod(i + j + r, 2) result.append(s) if r != 0: result.append(r) return tuple(reversed(result)) a = int(input("a = ")) b = int(input("b = ")) bin_a = binary(a) print(f"") bin_b = binary(b) print(f"") print(f"a + b = ")

a = 2513557
b = 13904503
(1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1)
(1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1)
a + b = (1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0)

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
def add(a,b): answer=str('') remain=int(0) for i in range(len(a)-1,-1,-1): if((int(a[i])+int(b[i])+remain)==0): answer+='0' continue if((int(a[i])+int(b[i])+remain)==1): if(remain==1): remain-=1 answer+='1' continue if((int(a[i])+int(b[i])+remain)==2): if(remain==0): remain+=1 answer+='0' continue if((int(a[i])+int(b[i])+remain)==3): answer+='1' continue if(remain==1): answer+='1' return answer[::-1] #================================================ def minus(a,b): answer=str('') remain=int(0) for i in range(len(a)-1,-1,-1): if((int(a[i])-int(b[i]))==-1): remain+=1 answer+='1' continue if((int(a[i])-int(b[i]))==0): if (remain==1): answer+='1' remain-=1 continue answer+='0' if ((int(a[i])-int(b[i]))==1): if (remain==1): remain-=1 answer+='0' continue answer+='1' return answer[::-1] #============================================= def multi(a,b): #============================================== num1=input('Type num1:') num2=input('Type num2:') #=============================================== #=============================================== if len(num1)>len(num2): num2=num2.rjust(len(num1),"0") else: num1=num1.rjust(len(num2),"0") #================================================ #================================================= print(add(num1,num2)) print(minus(num1,num2))

RikiCat, А теперь попробуйте не использовать питон, а создать свой язык программирования и на нем решить Вашу задачу.))))
Я конечно понимаю, что это не Вы сами придумываете такие глупые задания.

Источник

Оцените статью