私は今日ビット単位の演算について学び、Not(〜)がすべてのビットを逆にすることを学びました。例:
01010
to
10101
つまり、〜10は-5である必要がありますが、代わりに-11(pythonコマンドラインによる)であることがわかりました。
01010
to
11011
2つのビットだけが反転されています。10101ではない理由を誰かが説明できますか?
編集:私の計算機を見た後、私はそれを少しよく理解していますが、バイナリとintを決定するための私自身のコードはまだ混乱しています。(バイトモードで)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"
あなたの一人がそれを説明できますか?