¿Cómo puedo sumar, restar y comparar números binarios en Python sin convertirlos a decimales?
¿Cómo puedo sumar, restar y comparar números binarios en Python sin convertirlos a decimales?
Respuestas:
Puede convertir entre una representación de cadena del 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'
int('01100111',2)
escribir, 0b01100111
por ejemplo, que es 103
.
Creo que estás confundido acerca de lo que es binario. El binario y el decimal son solo representaciones diferentes de un número; por ejemplo, 101 base 2 y 5 base 10 son el mismo número. Las operaciones sumar, restar y comparar operan en números - 101 base 2 == 5 base 10 y la suma es la misma operación lógica sin importar en qué base esté trabajando. El hecho de que su intérprete de Python pueda almacenar cosas como binario internamente no no afecta la forma en que trabaja con él: si tiene un tipo entero, simplemente use +, -, etc.
Si tiene cadenas de dígitos binarios, tendrá que escribir su propia implementación o convertirlas usando la función int (binaryString, 2).
Si está hablando de operadores bit a bit, entonces está buscando:
~ 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, sin importar cómo se miren. La única diferencia entre decimal y binario es cómo representamos esos datos cuando los miramos.
Binario, decimal, hexadecimal ... la base solo importa al leer o sacar números, sumar números binarios es lo mismo que sumar números decimales: es solo una cuestión de representación.
A continuación se muestra una reescritura de una función publicada 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:]
'''
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'))
Dejo la función de resta como ejercicio para el lector.
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"))
x = x + 1 imprimir (x) a = x + 5 imprimir (a)
Creo que estás confundido acerca de lo que es binario. El binario y el decimal son solo representaciones diferentes de un número; por ejemplo, 101 base 2 y 5 base 10 son el mismo número. Las operaciones sumar, restar y comparar operan en números: 101 base 2 == 5 base 10 y la suma es la misma operación lógica sin importar en qué base esté trabajando.