Números binários em Python

Como posso adicionar, subtrair e comparar números binários em Python sem converter para decimal?

Author: Martijn Pieters, 2009-10-06

9 answers

Você pode converter entre uma representação de cadeia do binário usando bin () e 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'
 143
Author: John La Rooy, 2015-03-03 13:18:42
Acho que estás confuso sobre o que é binário. Binário e decimal são apenas representações diferentes de um número - por exemplo, 101 base 2 e 5 base 10 são o mesmo número. As operações adicionar, subtrair e comparar operar em números - 101 base 2 == 5 base 10 e adição é a mesma operação lógica, não importa em que base você está trabalhando. O facto de o seu interpretador python poder armazenar as coisas como Binárias internamente não afecta a forma como trabalha com ele-se tiver um tipo inteiro, apenas use +, -, etc.

Se tiver cadeias de caracteres binários, terá de escrever a sua própria implementação ou convertê-las usando a função int(binaryString, 2).

 9
Author: Steven Schlansker, 2009-10-06 03:44:47
Se estás a falar de operadores bitwise, então estás atrás de:
~ Not
^ XOR
| Or
& And

Caso contrário, os números binários funcionam exatamente da mesma forma que os números decimais, porque os números são números, não importa como você olha para eles. A única diferença entre decimal e binário é como nós representamos esses dados quando estamos olhando para ele.

 7
Author: Smashery, 2009-10-06 03:54:33

Binário, decimal, hexadecimal... a base só importa quando se lê ou se sobrepõe números, adicionar números binários é exatamente o mesmo que adicionar número decimal : é apenas uma questão de representação.

 3
Author: Pierre Bourdon, 2009-10-06 03:44:26

Abaixo está uma re-escrita de uma função postada anteriormente:

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:]
 0
Author: mastueben, 2017-12-15 03:18:31
'''
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'))
Deixo o func de subtracção como exercício para o leitor.
 0
Author: Gary02127, 2020-02-19 14:49:16
Não sei se ajuda, mas deixo a minha solução aqui.
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"))
 -1
Author: Mona Jalal, 2016-06-01 05:49:03

X = x + 1 imprimir (x) a = x + 5 print (a)

 -4
Author: user9491697, 2018-03-14 13:45:38
Acho que estás confuso sobre o que é binário. Binário e decimal são apenas representações diferentes de um número - por exemplo, 101 base 2 e 5 base 10 são o mesmo número. As operações adicionar, subtrair e comparar operar em números - 101 base 2 == 5 base 10 e adição é a mesma operação lógica, não importa em que base você está trabalhando.
 -6
Author: user5554869, 2015-11-12 14:26:37