|疑惑

最近在学习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学习中的“按位取反”笔记总结相关推荐

  1. python列表和元组的应用_python学习笔记之列表(list)与元组(tuple)详解

    前言 最近重新再看python的基础知识,感觉自己还是对于这些知识很陌生,需要用的时候还是需要翻书查阅,还是先注重基础吧--我要重新把python的教程阅读一遍,把以前自己忽略的部分学习,加强练习和记 ...

  2. 如何确定python开发环境已经配置好_python学习第一天:window安装python开发环境完整篇...

    Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上: 要开始学习Python编程,首先就得把Python安装到电脑里.安装后,你会得到Python解释器(就是负 ...

  3. python怎样查看describe的结果_Python学习第126课--pandas拿到数据后的总体描述

    [每天几分钟,从零入门python编程的世界!] 当我们拿到一份数据的时候,可以让pandas告诉我们这一组数据到底是什么样子的,也就是说对数据进行一个总体的描述. 之前我们可以通过df.head() ...

  4. python计算2的20次方_Python学习二运算符

    一.算术运算符 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返回一个被 ...

  5. python导入模块的语法结构_python学习第五讲,python基础语法之函数语法,与Import导入模块....

    python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 函数,就是一个代码块,这个代码块是别人写好的.我们调用就可以. 函数也可以称为方法. 1.函数语法定义 ...

  6. python第三项基础知识_Python学习心得——基础知识(三)

    一.常见的Python种类 1.Cpython 使用C语言实现,Python的官方版本,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上.我们目前 ...

  7. python编程心得体会800字_Python学习心得体会

    首先最开始,我们要明确一点,学习编程不是一日之功,需要每天投入时间学习,也不可纸上谈兵,需要自己亲自操作,不动手就不会发现问题,动了手印象才会深刻,记得更靠. 接下来我就稍微总结一下,我在学习中遇到的 ...

  8. python随机批量爬qu短视频——学习中

    因实习业务需要,正在学习中 一.爬chong介绍(先把理念搞懂了再踢球--范志毅) 1.爬chong架构 2.Python爬chong框架 3.爬chong基本流程 一.爬chong介绍(先把理念搞懂 ...

  9. python内置数字类型转换函数_Python学习 Day2-2 Python3的基本数据类型、数据内置类型转换函数...

    Python3的基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型& ...

最新文章

  1. Ansible 基础-介绍
  2. 博客园今天将排名计算错误了
  3. 计算机与生命科学交叉应用,第二届 “数学、计算机与生命科学交叉研究”青年学者论坛...
  4. c#中udp客户端连接遇到的问题 “远程主机强制关闭了一个现有的连接”
  5. odbc mysql 配置文件_ODBC连接主流数据库的配置方法
  6. 2017.10.23 chess 中国象棋 思考记录
  7. PreparedStatement JDBC域处理/SQl攻击
  8. BeanUtils工具包下载及应用
  9. ssh: connect to host 192.168.121.128 port 22: No route to host
  10. for (;;) 与 while (true),哪个更快?
  11. 因程序问题引起的服务器CPU负荷一直保持在90%以上
  12. python处理出租车轨迹数据_1-出租车数据的基础处理,由gps生成OD(pandas).ipynb...
  13. 210页的《pandas官方文档中文版》.pdf
  14. dfa确定有限自动机定义_确定性有限自动机(DFA)
  15. Mock数据模板规范详解
  16. tomcat配置优化,apr的配置详解
  17. 什么是SVC?AVC和SVC有什么区别
  18. 网站PHP框架之Laravel5.5(十一)数据库版本控制数据迁移工具migration详解
  19. 如何系统磁盘和raid卡的槽位对应起来
  20. 计算机更新80072f76,更新升级win10系统时出现错误代码0x80072f76怎么办

热门文章

  1. 【C++深度剖析教程27】多态的概念与意义
  2. Nginx----进阶
  3. 图像质量评价之数据库
  4. k-means 聚类过程演示
  5. GROUP BY 语句
  6. 可以无限增加iPhone 的图标吗?
  7. 基于web的工作流设计器(多比图形控件)
  8. 数据库人员面试:SQL Server常用测试题
  9. python画建筑分析图_教你用GH绘制酷炫的流线分析图
  10. 适合新手入门的8个python项目_推荐:一个适合于Python新手的入门练手项目