我今天一直在学习Bitwise操作,并且我学会了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"
你可以解释一下吗?
答案 0 :(得分:7)
假设值为32位,则10为
00000000000000000000000000001010
如果你反转所有这些位,你得到
11111111111111111111111111110101
或-11。因为它是2's complement system!
答案 1 :(得分:6)
11011
不 -11。你对负数的编码方案有误解。
在二进制补码中,-11是10101
,这是正确的位反转。
要取反二进制补码,可以反转所有位并加一:
01011 eleven
10100 invert
10101 add one gives negative eleven
答案 2 :(得分:0)
10101是-11,因为在二进制格式中,-X =〜X +1。
所以〜X = -X-1 =-(X +1)。