python中取反操作符怎么使用

    python取反操作符

    ~ : 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。

    ~x 类似于 -x-1

    1、计算依据

    • ①正数的原码、反码、补码都是一样的

    • ②负数的补码为符号位不变,剩余位取反再加1

    • ③原码求补码: 取反,+1

    • ④补码求原码: 取反,+1

    • ⑤负数是以补码存储的

    • ⑥取反操作是在原码上进行的

    • ⑦符号位,1表示负数,0表示正数

    2、例子

    ~(-2)

    首先你要知道 -2 在计算机里面的二进制形式,由⑤和②可知:

    • -2 原码:1000 0000 0000 0010

    • -2 反码:1111 1111 1111 1101 #符号位不变,各位求反

    • -2 补码:1111 1111 1111 1110 #补码 = 反码 + 1

    1111 1111 1111 1110 就是-2在计算机里面的原型

    现在开始对他求反,符号位不变,

    按位取反: 0000 0000 0000 0001

    很明显是一个正数,其原码为其本身,所以输出为1.

    ~2

    2 原码,反码,补码: 0000 0000 0000 0010

    按位取反: 1111 1111 1111 1101

    这是一个负数该怎么办?能直接求吗?

    很显然是不行的,⑥说了:取反操作计算结果是在原码上进行的,⑤也说了:负数是以补码存储的

    1111 1111 1111 1101 是 0000 0000 0000 0010 的反码,但我们想要的是结果,而不是在计算机里面的原型,

    恰好,④补码求原码: 取反,+1

    • 取反: 1000 0000 0000 0010

    • 加 1: 1000 0000 0000 0011

    于是,我们得到了原码,可以计算结果了

    1000 0000 0000 0011 = -3

    总之,取反很简单,但是要注意,取反后是不是原码,是否可以直接计算结果

    python数值取反问题~

    python中,用取反符号~得到的并不是我们想象中的结果,总结一下规律,就是 (取反后的值)= -(取反前的值)-1

    下面来分析一下

    例如对1取反,1的8位二进制表示为:0000 0001 , 取反后的结果是:1111 1110, 对于计算机来说,二进制以1开头表示的是负数, 所以这个1111 1110到底表示的是什么负值呢,想要知道这个值,可以求它的补码,即先取反码 :0000 0001, 再加1:0000 0010,说明 1111 1110 的原码为 0000 0010 也就是正数 2, 所以 1111 1110代表的就是负数 -2

    下面再举个例如

    对 -2 取反, -2的二进制表示为 2的补码,即 0000 0010 > 1111 1101 > 1111 1110 ,-2的二进制就表示为1111 1110, 对它取反得到 0000 0001,显而易见,取反后的值为1 , 所以 ~(-2)= 1 , ~1=-2

    总结出来就是:(取反后的值)= -(取反前的值)-1

    以上就是python中取反操作符怎么使用的详细内容,更多请关注其它相关文章!