zoukankan      html  css  js  c++  java
  • 20191031:Python取反运算详解

    20191031:Python取反运算详解

    取反运算:~3 == 4

           1.对于数字 3 =======》转换为二进制表示为011

           2.对011取反为100

           3.为什么表示-4

                  a.计算机用补码表示负数,正数的补码为其本身,负数的补码为其反码+1,现在我们一家知道了100表示的是一个负数的补码,需要做的就是求出其原码,转换为十进制就是我们要求的结果

                  b.所以针对负数的补码求其原码具体过程如下:

                         i.如果补码最高位是0,则原码就是补码,如0110 的源码也是0110

                         ii.如果补码的最高位是1,则原码就是补码的反码+1,然后取相反数

                               

                         011

                         001

           -------------------------------------

                         100

           以100为例:100的反码为011,011+1 ==100,100转换为十进制为4,取相反数为-4

    ===========================================================================================

    反推:~-4 == 3

           1.-4在内存中存储形式为100(存的是补码),根据前面b步骤表示负数补码求源码的过程,源码为反码011+1 = 100======》-4的源码为100

           2.对-4的源码取反 011,011首位是0,表示正数,所以表示3

           关键知识点:计算机在内存中存储数据是以补码的形式存储,所谓的取反运算是针对源码来计算的。

                  1.正数的,反码,补码为其本身

                  2.负数的,反码为其符号位不变,其他位取反

                  3.负数的,补码为其反码+1

                  4.负数的补码为其反码+1

    ===========================================================================================

    总结:

           计算机对一个数求反的过程

           1.先求出其源码(因为内存中存的都是反码)

           2.对源码进行取反运算

           3.将取反以后的值转换为源码

           4.将源码转换为十进制真值

  • 相关阅读:
    VCL消息处理机制
    效率由心生,快速提高工作效率秘诀
    我的插件架构
    Windows消息机制要点(转)
    SQLite区分大小写查询
    请教: 事件和消息的联系?
    DataAdapter数据集DataSet和数据库的同步(3):使用CommandBuilder来更新数据集
    TCP编程(4): 发送电子邮件 MailMessage, SmtpClient, NetworkCredential
    强类型的数据集,在处理以直接附加方式的SQLServer的MDF文件时无法更新数据原因分析
    javascript调试测试,利用vs2008:智能对象类型感知,方法及属性提示;立即窗口调试等
  • 原文地址:https://www.cnblogs.com/hyj691001/p/11773318.html
Copyright © 2011-2022 走看看