web-dev-qa-db-fra.com

Nombres binaires en Python

Comment puis-je ajouter, soustraire et comparer des nombres binaires en Python sans convertir en décimal?

54
EkSwaim

Vous pouvez convertir entre une représentation sous forme de chaîne du binaire en utilisant bin () et 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'
100
John La Rooy

Je pense que vous êtes confus sur ce qu'est le binaire. Les valeurs binaires et décimales ne sont que des représentations différentes d’un nombre - p. Ex. 101 base 2 et 5 base 10 sont le même nombre. Les opérations d’addition, de soustraction et de comparaison s’appliquent à des nombres - 101 base 2 == 5 base 10 et l’addition est identique, quelle que soit la base sur laquelle vous travaillez. N'affectez pas la façon dont vous travaillez avec elle - si vous avez un type entier, utilisez simplement +, -, etc.

Si vous avez des chaînes de chiffres binaires, vous devez écrire votre propre implémentation ou les convertir à l'aide de la fonction int (binaryString, 2).

9

Si vous parlez d'opérateurs au niveau des bits, alors vous êtes après:

~ Not
^ XOR
| Or
& And

Sinon, les nombres binaires fonctionnent exactement comme les nombres décimaux, car ils sont des nombres, peu importe leur apparence. La seule différence entre décimal et binaire est la façon dont nous représentons ces données lorsque nous les examinons.

7
Smashery

Binaire, décimal, hexadécimal ... la base ne compte que pour la lecture ou la sortie de nombres, ajouter des nombres binaires revient à ajouter des nombres décimaux: il s’agit simplement d’une représentation.

3
Pierre Bourdon

Vous trouverez ci-dessous une réécriture d’une fonction précédemment publiée: 

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
mastueben