2009-10-06 21 views
48

¿Cómo puedo agregar, restar y comparar números binarios en Python sin convertir a decimal?Números binarios en Python

+1

es esta una pregunta tarea, es decir, qué preguntas cómo hacer las matemáticas en un nivel bajo? Consulte (http://stackoverflow.com/questions/1149929/how-to-add-two-numbers-without-using-or-or-another-arithmetic-operator/1150996#1150996) –

+1

¿Puede dar algunos ejemplos de qué estás tratando de lograr? –

+6

los números ya son binarios en python. Se convierten a formato binario cuando se inicia el programa y solo se convierten de nuevo a decimal cuando se usa algo como str() o imprime –

Respuesta

88

Puede convertir entre una cadena que representa el binario 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' 
+0

Gracias. Sí, esta es una tarea de tarea. La asignación indica que se supone que debo dejar los números en 'formato binario' cuando realizo ._add, ._sub, ._gt, ._lt, y ._eq. Su ejemplo anterior parece convertir de bin a int. No estoy seguro de si esto será aceptable, pero no veo otra forma de hacerlo, excepto su ejemplo. –

+6

También puede usar el literal binario cuando usa Python 2.6 y superior. En lugar de 'int ('01100111', 2)' escribes '0b01100111' por ejemplo, que es' 103'. – Joschua

3

Binario, decimal, hexadecimal ... la base solo importa al leer o sacar números, agregar números binarios es exactamente lo mismo que agregar un número decimal: es solo una cuestión de representación.

9

Creo que está confundido acerca de qué es el binario. Binario y decimal son solo representaciones diferentes de un número, p. 101 base 2 y 5 base 10 son el mismo número. Las operaciones agregan, restan y comparan operar en números: 101 base 2 == 5 base 10 y además es la misma operación lógica sin importar en qué base esté trabajando. El hecho de que su intérprete python pueda almacenar cosas como binario internamente no lo hace No afecta cómo trabajas con él. Si tienes un tipo entero, solo usa +, -, etc.

Si tienes cadenas de dígitos binarios, tendrás que escribir tu propia implementación o convertirlas usando la función int (binaryString, 2).

7

Si estás hablando de operadores bit a bit, entonces lo que busca es:

~ Not 
^ XOR 
| Or 
& And 

De lo contrario, los números binarios funcionan exactamente igual que los números decimales, porque los números son números, no importa cómo se mire ellas . La única diferencia entre decimal y binario es cómo representamos esos datos cuando lo estamos viendo.

+0

Siempre es divertido escribir add, sub etc con operadores bit a bit. Para cualquier persona interesada en esto, busque guías en circuitos, más específicamente medios sumadores, luego sumadores completos y, finalmente, restador, tal vez incluso un substractor sumador. Desde aquí puede traducirlo en operadores bit a bit. –

-4

creo que usted está confundido acerca de lo que es binaria. Binario y decimal son solo representaciones diferentes de un número, p. 101 base 2 y 5 base 10 son el mismo número. Las operaciones agregan, restan y comparan operar en números: 101 base 2 == 5 base 10 y además es la misma operación lógica sin importar en qué base esté trabajando.

-1

No estoy seguro si es útil, pero dejo mi solución aquí:

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")) 
0

a continuación se muestra una re-escritura de una función previamente publicado:

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:] 
Cuestiones relacionadas