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.
InformationsquelleAutor J_mie6 | 2012-08-04