python中的取反操作符(~)

 更新时间:2023年03月25日 16:41:38   作者:王魚(Virgil)  
这篇文章主要介绍了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进阶学习实时目标跟踪示例详解

    python进阶学习实时目标跟踪示例详解

    这篇文章主要为大家介绍了python进阶学习实时目标跟踪示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • python 自定义异常和主动抛出异常(raise)的操作

    python 自定义异常和主动抛出异常(raise)的操作

    这篇文章主要介绍了python 自定义异常和主动抛出异常(raise)的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • python中sympy库求常微分方程的用法

    python中sympy库求常微分方程的用法

    这篇文章主要介绍了python中sympy库求常微分方程的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python 数据可视化实现5种炫酷的动态图

    Python 数据可视化实现5种炫酷的动态图

    数据可以帮助我们描述这个世界、阐释自己的想法和展示自己的成果,但如果只有单调乏味的文本和数字,我们却往往能难抓住观众的眼球。而很多时候,一张漂亮的可视化图表就足以胜过千言万语
    2022-01-01
  • Python常用模块logging——日志输出功能(示例代码)

    Python常用模块logging——日志输出功能(示例代码)

    logging模块是Python的内置模块,主要用于输出运行日志,可以灵活配置输出日志的各项信息。这篇文章主要介绍了Python常用模块logging——日志输出的实例代码,需要的朋友可以参考下
    2019-11-11
  • tensorflow实现简单的卷积网络

    tensorflow实现简单的卷积网络

    这篇文章主要为大家详细介绍了tensorflow实现简单的卷积网络,使用的数据集是MNIST,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • python使用tqdm模块处理文件阅读进度条显示

    python使用tqdm模块处理文件阅读进度条显示

    这篇文章主要为大家介绍了python使用tqdm模块处理文件阅读显示进度条示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Python 进程操作之进程间通过队列共享数据,队列Queue简单示例

    Python 进程操作之进程间通过队列共享数据,队列Queue简单示例

    这篇文章主要介绍了Python 进程操作之进程间通过队列共享数据,队列Queue,结合实例形式分析了Python进程数据共享、队列数据处理相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • python实现字符串逆序输出的几种方法

    python实现字符串逆序输出的几种方法

    本文介绍了四种在Python中实现字符串逆序输出的方法,每种方法都有其优缺点,下面就来介绍一下如何使用,感兴趣的可以了解一下
    2024-12-12
  • 基于python 凸包问题的解决

    基于python 凸包问题的解决

    这篇文章主要介绍了基于python 凸包问题的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论