python按位取反(~)
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按位取反(~)相关推荐
- python按位取反的问题
def decrypt(data):dedata = []for temp in data:print(temp)temp = int(temp,16)temp = temp ^ 0x4506DFCA ...
- Python中的按位取反
说明: 以下内容摘自:大佬博客地址.对定义进行了介绍,并举例例子进行了说明. 按位取反运算符,用来对一个二进制数按位取反,即将0变1,将1变0,按理说十进制的5(0000 0101)按位取反应该为(1 ...
- python中什么是按位取反_Python学习中的“按位取反”笔记总结
|疑惑 最近在学习Python的过程中了解到位运算符,但对于按位取反有点迷糊,就比如说~9(按位取反)之后的结果是-10,为什么不是6呢?所以下面就来看看为什么不是6,正确结果是如何计算出来的呢? 敲 ...
- Python中数字按位取反的方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 Python中有个按位取反运算符:,但这个运算符并不是真正的按位取反,而是效果相当于原值乘以负一再减 ...
- Python按位与、按位或、按位异或、按位取反(笔记)
1. 按位与 按位与是针对二进制数的操作,指将两个二进制数的每一位都进行比较,如果两个相应的二进位都为 1 则此位为 1,否则为 0.在本例中, 5 的二进制表达为 101 , 3 的二进制表达为 1 ...
- 在python中二进制位取反运算如何进行_Python位运算符详解
Python 位运算按照数据在内存中的二进制位(Bit)进行操作,它一般用于底层开发(算法设计.驱动.图像处理.单片机等),在应用层开发(Web 开发.Linux 运维等)中并不常见.想加快学习进度, ...
- python ~ not 的区别 :前者按位取反,后者是逻辑‘与或非’的‘非’
~按位取反 https://www.cnblogs.com/JYNNO1/p/10525649.html not 与或非'的'非' http://www.weixueyuan.net/a/381.ht ...
- python按位右移的作用_python入门之左移,右移,按位与,按位或,按位异或,按位取反...
1.< 将数字的位向左移动指定的位数(二进制表示): 例:2<<2输出8 2的二进制表示为10,向左移动2位为1000,十进制为8. 2.>>(右移) 将数字的位向右移动 ...
- Python中按位取反运算操作的解法
大家都知道5的取反(翻转)为-6.那么为什么会是-6呢?接下来我将详细介绍一下. 首先要明确几点(原码.反码.补码): 正数: 原码=反码=补码 负数 反码:符号位不变,其他位取反 补码 = 反码 + ...
最新文章
- js获取过滤条件中参数的快捷方式
- 设计模式复习-迭代器模式
- angular 拦截器
- php连接数据库语言,PHP语言连接MYSQL数据库实例代码
- 微信二次修改微信号_微信支持修改微信号了!功能正式上线,附详细教程
- HEOI 2017 游记
- windows常见快捷键
- 理解Rust的所有权
- 电力用户用电信息采集系统通信协议报文解析示例
- 酒店客房管理信息系统
- Java数组知识点概述
- 【栈和队列】栈的push、pop序列
- java实现海盗比酒量
- 住房公积金专办员考试多少分及格?考试难不难?
- jQuery入门案例
- 最小生成树(普里姆算法)
- dir-612b虚拟服务器,D-Link DIR 612B路由器设置上网教程
- Imagination宣布推出基于RISC-V的CPU产品系列
- creo扫描选择多条链作为轨迹_CREO/PROE四芯花线建模,灵活使用关系式控制扫描截面就成了...
- oracle erp云服务器配置,cloud介绍相关现代erp云解决方案- oracle erp cloud.pdf