Как я могу складывать, вычитать и сравнивать двоичные числа в Python без преобразования в десятичные?
Как я могу складывать, вычитать и сравнивать двоичные числа в Python без преобразования в десятичные?
Ответы:
Вы можете преобразовать строковое представление двоичного файла с помощью 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'
int('01100111',2)
чтобы писать 0b01100111
например, что есть 103
.
Я думаю, вы не понимаете, что такое двоичный файл. Двоичное и десятичное - это просто разные представления числа - например, 101 с основанием 2 и 5 с основанием 10 - это одно и то же число. Операции сложения, вычитания и сравнения работают с числами - 101 база 2 == 5 основание 10, а сложение - это одна и та же логическая операция независимо от того, на какой базе вы работаете. Тот факт, что ваш интерпретатор python может хранить вещи как двоичные внутри, не не влияет на то, как вы с ним работаете - если у вас целочисленный тип, просто используйте +, - и т. д.
Если у вас есть строки двоичных цифр, вам придется либо написать свою собственную реализацию, либо преобразовать их с помощью функции int (binaryString, 2).
Если вы говорите о побитовых операторах, то вам нужно:
~ Not
^ XOR
| Or
& And
В остальном двоичные числа работают точно так же, как десятичные числа, потому что числа - это числа, как бы вы на них ни смотрели. Единственная разница между десятичным и двоичным числами заключается в том, как мы представляем эти данные, когда смотрим на них.
Двоичное, десятичное, шестнадцатеричное ... основание имеет значение только при чтении или выводе чисел, добавление двоичных чисел ничем не отличается от добавления десятичного числа: это просто вопрос представления.
Ниже приводится перезапись ранее опубликованной функции:
def addBinary(a, b): # Example: a = '11' + b =' 100' returns as '111'.
for ch in a: assert ch in {'0','1'}, 'bad digit: ' + ch
for ch in b: assert ch in {'0','1'}, 'bad digit: ' + ch
sumx = int(a, 2) + int(b, 2)
return bin(sumx)[2:]
'''
I expect the intent behind this assignment was to work in binary string format.
This is absolutely doable.
'''
def compare(bin1, bin2):
return bin1.lstrip('0') == bin2.lstrip('0')
def add(bin1, bin2):
result = ''
blen = max((len(bin1), len(bin2))) + 1
bin1, bin2 = bin1.zfill(blen), bin2.zfill(blen)
carry_s = '0'
for b1, b2 in list(zip(bin1, bin2))[::-1]:
count = (carry_s, b1, b2).count('1')
carry_s = '1' if count >= 2 else '0'
result += '1' if count % 2 else '0'
return result[::-1]
if __name__ == '__main__':
print(add('101', '100'))
Я оставляю функцию вычитания в качестве упражнения для читателя.
Не уверен, что это поможет, но я оставляю свое решение здесь:
class Solution:
# @param A : string
# @param B : string
# @return a strings
def addBinary(self, A, B):
num1 = bin(int(A, 2))
num2 = bin(int(B, 2))
bin_str = bin(int(num1, 2)+int(num2, 2))
b_index = bin_str.index('b')
return bin_str[b_index+1:]
s = Solution()
print(s.addBinary("11", "100"))
x = x + 1 print (x) a = x + 5 print (a)
Я думаю, вы не понимаете, что такое двоичный файл. Двоичное и десятичное - это просто разные представления числа - например, 101 с основанием 2 и 5 с основанием 10 - это одно и то же число. Операции сложения, вычитания и сравнения работают с числами - 101 основание 2 == 5 основание 10, а сложение - это одна и та же логическая операция, независимо от того, с какой базой вы работаете.