Comment faire des opérations bit à bit de travail en Python?
J'ai appris sur les opérations bit à Bit aujourd'hui et j'ai appris que Non (~) l'inverse tous les bits, par exemple:
01010
to
10101
qui signifie ~10 -5 mais au lieu de cela j'ai vu qu'il est de -11 (par le python en ligne de commande) qui est
01010
to
11011
seulement deux des bits ont été inversées. Quelqu'un peut-il expliquer pourquoi il n'est pas 10101?
EDIT: Après avoir regardé sur ma calculatrice, je comprends un peu mieux, Mais mon propre code pour déterminer le binaire et les ints est encore confus. En entrant dans l' (en mode octet) 11110101 me donne -11 mais le même entré dans mon code donne -117:
def binaryToInt(biNum, bUnsigned = False):
iNum = 0
bSign = int(biNum[0]) if not (bUnsigned or biNum[-1] == "u") else 0
biNum = biNum[(1 if not (bUnsigned or biNum[-1] == "u") else 0):(len(biNum) if biNum[-1] != "u" else -1)]
for i in xrange(len(biNum)):
iNum += int(biNum[i]) * 2**(len(biNum) - 1 - i)
return (iNum if not bSign else -iNum)
def intToBinary(iNum, bUnsigned = False):
bSign = "1" if iNum < 0 else "0"
iLoopNum = int((iNum ** 2) ** 0.5) #make positive!
biNum = ""
while iLoopNum:
biNum += str(iLoopNum%2)
iLoopNum /= 2
return bSign + biNum[::-1] if not bUnsigned else biNum[::-1] + "u"
peut que l'un de vous l'expliquer?
- vous devriez poster cela comme une réponse.
- OK.
Vous devez vous connecter pour publier un commentaire.
11011
est pas -11. Vous avez une méconnaissance du système de codage pour les nombres négatifs.En complément à deux, -11 est
10101
qui est le bon bit d'inversion.De nier un complément à deux le nombre, inverser tous les bits et ajouter un:
1
bits sur la gauche; Python entiers jamais de débordement et d'utiliser autant de bits qu'ils en ont besoin, de sorte qu'il ne fait pas de sens de parler du nombre de bits dans un nombre négatif.3.9.1 Fundamental types /7
: "... la présente Norme Internationale permet complément de 2, 1 de complément et signé ampleur des représentations pour les types intégraux". Tout comme C.En supposant que les valeurs de 32 bits, 10 est
et si vous inverser tous les bits, vous obtenez
ou -11. Parce que c'est un 2 du système du complément!
1
s sur la gauche. Vous avez besoin de savoir combien sont en cours d'utilisation dans le but de convertir le nombre. Python définit~
de sorte que le nombre de bits utilisés pour représenter le résultat est égal au nombre minimum de bits nécessaires pour représenter l'entrée. L'effet net de qui, cependant, est que~x
==-x - 1
, en général.