Python中的~(按位取反)运算的理解:

按照我平时的理解,当我使用~按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是~按位取反的运算结果(这点没问题)

例如,假如我的计算机是32位的,我接下来要计算~5的值,计算过程如下:

5 的二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101

执行~运算,即~5后: 1111 1111 1111 1111 1111 1111 1111 1010,即结果为-6

以上过程没有任何问题,但我们如果忘记了负数的二进制表达方式,那么就会对这个结果产生疑问,为什么1111 1111 1111 1111 1111 1111 1111 1010表示-6,可能我们会以为它应该表示-10等等,所以,理解~按位取反的另一个关键就是理解1111 1111 1111 1111 1111 1111 1111 1010为什么表示-6,也即理解负数的二进制表达方式。

现在计算机普遍使用补码表示负数。知道一个数的补码,要求其值的方法是:首先看符号位也就是最左的一位,如果是1代表是负数(-)如果是0代码是正数(+),然后对该值取反再+1,得到其源码。

例如本例中得到的 1111 1111 1111 1111 1111 1111 1111 1010,其符号位(最左一位)是1,表明它表示的是负数,欲求其源码,需先对其取反,然后再加1:0000 0000 0000 0000 0000 0000 0000 0101 + 1 = 0000 0000 0000 0000 0000 0000 0000 0110,然后在得到的源码前加一个负号,即-0000 0000 0000 0000 0000 0000 0000 0110 = -6。以上便是对~按位取反运算以及负数的二进制表示的理解,不难发现,在求源码的时候,要将补码进行取反后再加1,然而这个补码原本就是之前由~运算时,对原来的操作数通过~按位取反而得来的,所以,此时在求该补码的源码时的取反操作,相当于将补码变回了原来的那个操作数,之后进行的加1操作就相当于对原来的操作数进行加1,只不过结果变成了他的相反数。

因此,可以总结出~按位取反的计算结论是:~n = -(n+1)

例如本例中,~5 = -(5+1),即~5 = -6

python按位取反(~)相关推荐

  1. python按位取反的问题

    def decrypt(data):dedata = []for temp in data:print(temp)temp = int(temp,16)temp = temp ^ 0x4506DFCA ...

  2. Python中的按位取反

    说明: 以下内容摘自:大佬博客地址.对定义进行了介绍,并举例例子进行了说明. 按位取反运算符,用来对一个二进制数按位取反,即将0变1,将1变0,按理说十进制的5(0000 0101)按位取反应该为(1 ...

  3. python中什么是按位取反_Python学习中的“按位取反”笔记总结

    |疑惑 最近在学习Python的过程中了解到位运算符,但对于按位取反有点迷糊,就比如说~9(按位取反)之后的结果是-10,为什么不是6呢?所以下面就来看看为什么不是6,正确结果是如何计算出来的呢? 敲 ...

  4. Python中数字按位取反的方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 Python中有个按位取反运算符:,但这个运算符并不是真正的按位取反,而是效果相当于原值乘以负一再减 ...

  5. Python按位与、按位或、按位异或、按位取反(笔记)

    1. 按位与 按位与是针对二进制数的操作,指将两个二进制数的每一位都进行比较,如果两个相应的二进位都为 1 则此位为 1,否则为 0.在本例中, 5 的二进制表达为 101 , 3 的二进制表达为 1 ...

  6. 在python中二进制位取反运算如何进行_Python位运算符详解

    Python 位运算按照数据在内存中的二进制位(Bit)进行操作,它一般用于底层开发(算法设计.驱动.图像处理.单片机等),在应用层开发(Web 开发.Linux 运维等)中并不常见.想加快学习进度, ...

  7. python ~ not 的区别 :前者按位取反,后者是逻辑‘与或非’的‘非’

    ~按位取反 https://www.cnblogs.com/JYNNO1/p/10525649.html not 与或非'的'非' http://www.weixueyuan.net/a/381.ht ...

  8. python按位右移的作用_python入门之左移,右移,按位与,按位或,按位异或,按位取反...

    1.< 将数字的位向左移动指定的位数(二进制表示): 例:2<<2输出8 2的二进制表示为10,向左移动2位为1000,十进制为8. 2.>>(右移) 将数字的位向右移动 ...

  9. Python中按位取反运算操作的解法

    大家都知道5的取反(翻转)为-6.那么为什么会是-6呢?接下来我将详细介绍一下. 首先要明确几点(原码.反码.补码): 正数: 原码=反码=补码 负数 反码:符号位不变,其他位取反 补码 = 反码 + ...

最新文章

  1. js获取过滤条件中参数的快捷方式
  2. 设计模式复习-迭代器模式
  3. angular 拦截器
  4. php连接数据库语言,PHP语言连接MYSQL数据库实例代码
  5. 微信二次修改微信号_微信支持修改微信号了!功能正式上线,附详细教程
  6. HEOI 2017 游记
  7. windows常见快捷键
  8. 理解Rust的所有权
  9. 电力用户用电信息采集系统通信协议报文解析示例
  10. 酒店客房管理信息系统
  11. Java数组知识点概述
  12. 【栈和队列】栈的push、pop序列
  13. java实现海盗比酒量
  14. 住房公积金专办员考试多少分及格?考试难不难?
  15. jQuery入门案例
  16. 最小生成树(普里姆算法)
  17. dir-612b虚拟服务器,D-Link DIR 612B路由器设置上网教程
  18. Imagination宣布推出基于RISC-V的CPU产品系列
  19. creo扫描选择多条链作为轨迹_CREO/PROE四芯花线建模,灵活使用关系式控制扫描截面就成了...
  20. oracle erp云服务器配置,cloud介绍相关现代erp云解决方案- oracle erp cloud.pdf

热门文章

  1. 黄金分割比和斐波那契数列
  2. Zabbix设置邮件告警+企业微信告警
  3. js中判断文本框是否为空的两种方法
  4. contentDocument contentWindow,canvas 、svg,iframe
  5. 数据科学家之路 - 个人学习历程和入门规划
  6. Java读写Gemfire,内存数据库Gemfire写入性能报告
  7. android imageview缩小,android Imageview 缩小整个高度。
  8. CentOS设置密码复杂度方法
  9. access和filemaker_在FileMaker中识别名片和图片文字
  10. undertow入门