Python 3.x ~Python 3中的二进制1补码

Python 3.x ~Python 3中的二进制1补码,python-3.x,bitwise-operators,Python 3.x,Bitwise Operators,只是对二元一的补码如何工作有疑问。 例如(在python中): 给出一个输出:- -61 60的二进制补码不是: a = 0011 1100 ~a = 1100 0011 它是否应该是-60 我知道我错了,但为什么它会提前到-61?你就快到了1100 0011实际上是-61 以下是如何将负二进制转换为十进制: 倒位 加1 转换成十进制 加负号 因此: ~是位反转运算符,并且: x的位反转定义为-(x+1) 这就是整数的位反转的工作原理 二者的互补轮很好地体现了这一点: 如您所见,1的位反

只是对二元一的补码如何工作有疑问。 例如(在python中):

给出一个输出:-

-61
60
的二进制补码不是:

a = 0011 1100
~a  = 1100 0011
它是否应该是
-60


我知道我错了,但为什么它会提前到
-61

你就快到了<代码>1100 0011实际上是
-61

以下是如何将负二进制转换为十进制:

  • 倒位

  • 加1

  • 转换成十进制

  • 加负号

  • 因此:


    ~
    是位反转运算符,并且:

    x的位反转定义为-(x+1)

    这就是整数的位反转的工作原理

    二者的互补轮很好地体现了这一点:


    如您所见,1的位反转为-2,2的位反转为-3,…,60的位反转为-61。

    在所有现代计算机中,2的补码二进制用于表示整数(而不是经典二进制表示)。 如中所确认:

    2的补码二进制与经典二进制相同 表示正整数,但对于 负数。负数通过执行 二对其绝对值的补码运算

    负数-x的2的补码是使用(x-1)的位模式写入的,所有位都被补码(从1切换到0或从0切换到1)

    示例: 2的-15的补码:

    -15 => complement(x-1) => complement(15-1) => complement(14) => complement(1110) => 0001
    
    Python的((按位NOT)运算符返回数字的1的补码

    示例:

    print(~14) # Outputs -15
    
    14是(1110)的2的补码二进制形式

    在这里,~14将把这种形式的所有位(即1的补码)反转为0001。 然而,0001实际上是2的-15的补码

    记住整数的按位NOT运算的一个简单规则是-(x+1)

        1100 0011
    +   0011 1101
    -------------
      1 0000 0000 
    
    -15 => complement(x-1) => complement(15-1) => complement(14) => complement(1110) => 0001
    
    print(~14) # Outputs -15
    
    print(~60) # Outputs -61
    print(~-60) # Outputs 59