python中什么是按位取反_Python学习中的“按位取反”笔记总结
|疑惑
最近在学习Python的过程中了解到位运算符,但对于按位取反有点迷糊,就比如说~9(按位取反)之后的结果是-10,为什么不是6呢?所以下面就来看看为什么不是6,正确结果是如何计算出来的呢?
敲重点:二进制数在内存中以补码的形式存储!!!
那么上面那句话有两个关键词,我们先来看看"二进制数"
|二进制数按位取反是位运算符,而位运算符是应用在两个数的运算上,会对数字的二进制所有位数进行从低到高的运算。
所以我们需要把十进制数转换成二进制数再进行运算,但补码又是什么呢?
|补码
补码是属于计算机三种机械数的一种,机械数有原码、反码、补码。
如果是正数,那么原码 = 反码 = 补码,正数的符号位为0(如 0 1001,这里的0就是符号位,负数类似);
如果是负数,那么反码就是把原码的每一位取反,也就是0变成1,1变成0;补码就是在反码的基础上,末位+1,负数的符号位为1。
|解题过程
所以这样子,我们再来看回原题,~9 = -10是怎样出来的呢?
首先,第一步,把十进制数转化成二进制数;(即1001(2))
第二步,由于二进制数在内存中以补码的形式存储,所以我们需要把第一步得到的二进制数转成补码,要成补码先要把原码转成反码(即0 1001,正数原反补一样,为啥四位变五位了呢?第一个0就是我们刚刚提到的符号位啦),然后反码得到补码(即0 1001,正数原反补一样);
第三步,终于进行按位取反啦!把第二步得到的补码进行按位取反(即1 0110);
第四步,把第三步的操作转为补码(因为敲重点:二进制数在内存中以补码的形式存储!!!,所以就需要把取反后的二进制数,转成补码),但是由于按位取反后变为负数,所以我们需要应用负数的原反补规则,先变成反码(即1 1001),然后反码末位+1得到补码(即1 1010);
第五步,所以我们把第四步得到的补码转成十进制数就是结果啦(1010转为十进制就是10,然后符号位是1,故~9结果为-10)。
|总结规律
通过这么复杂的步骤是不是觉得有点麻烦呢?
总结规律!!!快速又便捷:
~x = -(x+1)
大家可以试试是不是这个规律呢?
———————————————————————————————————————
以上为仅为个人总结观点,如果有错误,请联系我进行修改(mailto:entireyu@qq.com),十分感谢您能够看完!
有疑问,欢迎在评论区评论哦。
python中什么是按位取反_Python学习中的“按位取反”笔记总结相关推荐
- python列表和元组的应用_python学习笔记之列表(list)与元组(tuple)详解
前言 最近重新再看python的基础知识,感觉自己还是对于这些知识很陌生,需要用的时候还是需要翻书查阅,还是先注重基础吧--我要重新把python的教程阅读一遍,把以前自己忽略的部分学习,加强练习和记 ...
- 如何确定python开发环境已经配置好_python学习第一天:window安装python开发环境完整篇...
Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上: 要开始学习Python编程,首先就得把Python安装到电脑里.安装后,你会得到Python解释器(就是负 ...
- python怎样查看describe的结果_Python学习第126课--pandas拿到数据后的总体描述
[每天几分钟,从零入门python编程的世界!] 当我们拿到一份数据的时候,可以让pandas告诉我们这一组数据到底是什么样子的,也就是说对数据进行一个总体的描述. 之前我们可以通过df.head() ...
- python计算2的20次方_Python学习二运算符
一.算术运算符 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返回一个被 ...
- python导入模块的语法结构_python学习第五讲,python基础语法之函数语法,与Import导入模块....
python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 函数,就是一个代码块,这个代码块是别人写好的.我们调用就可以. 函数也可以称为方法. 1.函数语法定义 ...
- python第三项基础知识_Python学习心得——基础知识(三)
一.常见的Python种类 1.Cpython 使用C语言实现,Python的官方版本,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上.我们目前 ...
- python编程心得体会800字_Python学习心得体会
首先最开始,我们要明确一点,学习编程不是一日之功,需要每天投入时间学习,也不可纸上谈兵,需要自己亲自操作,不动手就不会发现问题,动了手印象才会深刻,记得更靠. 接下来我就稍微总结一下,我在学习中遇到的 ...
- python随机批量爬qu短视频——学习中
因实习业务需要,正在学习中 一.爬chong介绍(先把理念搞懂了再踢球--范志毅) 1.爬chong架构 2.Python爬chong框架 3.爬chong基本流程 一.爬chong介绍(先把理念搞懂 ...
- python内置数字类型转换函数_Python学习 Day2-2 Python3的基本数据类型、数据内置类型转换函数...
Python3的基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型& ...
最新文章
- Ansible 基础-介绍
- 博客园今天将排名计算错误了
- 计算机与生命科学交叉应用,第二届 “数学、计算机与生命科学交叉研究”青年学者论坛...
- c#中udp客户端连接遇到的问题 “远程主机强制关闭了一个现有的连接”
- odbc mysql 配置文件_ODBC连接主流数据库的配置方法
- 2017.10.23 chess 中国象棋 思考记录
- PreparedStatement JDBC域处理/SQl攻击
- BeanUtils工具包下载及应用
- ssh: connect to host 192.168.121.128 port 22: No route to host
- for (;;) 与 while (true),哪个更快?
- 因程序问题引起的服务器CPU负荷一直保持在90%以上
- python处理出租车轨迹数据_1-出租车数据的基础处理,由gps生成OD(pandas).ipynb...
- 210页的《pandas官方文档中文版》.pdf
- dfa确定有限自动机定义_确定性有限自动机(DFA)
- Mock数据模板规范详解
- tomcat配置优化,apr的配置详解
- 什么是SVC?AVC和SVC有什么区别
- 网站PHP框架之Laravel5.5(十一)数据库版本控制数据迁移工具migration详解
- 如何系统磁盘和raid卡的槽位对应起来
- 计算机更新80072f76,更新升级win10系统时出现错误代码0x80072f76怎么办