我今天一直在学习按位运算,我知道不是(~)反转所有位,例如: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"
你们能解释一下吗?