7

私は今日ビット単位の演算について学び、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"

あなたの一人がそれを説明できますか?

4

3 に答える 3

7

値が32ビットであると仮定すると、10は

00000000000000000000000000001010

これらすべてのビットを反転すると、次のようになります。

11111111111111111111111111110101

または-11。2の補数システムだからです!

于 2012-08-04T16:29:57.753 に答える
6

11011-11ではありません。負の数のエンコード方式について誤解があります。

2の補数では、-11が10101正しいビット反転です。

2の補数を打ち消すには、すべてのビットを反転して1つ追加します。

01011 eleven
10100 invert
10101 add one gives negative eleven
于 2012-08-04T16:21:56.787 に答える
0

バイナリでは-X=〜X + 1であるため、10101は-11です。

したがって、〜X = -X --1 =-(X + 1)。

于 2019-10-04T06:28:18.020 に答える