Как работают побитовые операции в Python?

Сегодня я узнал о побитовых операциях и узнал, что Not (~)инвертирует все биты, например.:

01010
to
10101

что означает, что ~10 должно быть -5, но вместо этого я видел, что это -11 (в командной строке python ), которая

01010
to
11011

инвертированы только два бита. Кто-нибудь может объяснить, почему это не 10101?

РЕДАКТИРОВАТЬ :Посмотрев на свой калькулятор, я понял его немного лучше, но мой собственный код для определения двоичных и целых чисел все еще путается. Ввод в (в байтовом режиме )11110101 дает мне -11, но то же самое, введенное в моем коде, дает -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"

кто-нибудь из вас может это объяснить?

7
задан J_mie6 4 August 2012 в 17:39
поделиться