• ~按位取反


    ~取反的步骤应该是:
    一、先由一个数的原码推出它的补码(原码与反码相互转化时符号位不用取反)
    二、对补码进行按位取反(包括符号位也取反),取反后的数就是新补码
    三、这个新补码是计算机存储用的,所以用这个新补码反推出原码才是我们能读懂的二进制数字。

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

    例如:

    ~5 = -6 的计算步骤:

    一、先由一个数的原码推出它的补码

    5的原码 = 反码 = 补码:0000...0101    正数的原反补码相同

    二、对补码进行按位取反,取反后的数就是新补码

    取反操作:1111...1010    按位取反的操作对象是补码,且符号位也会取反,取反后会变成新补码

    三、补码是内存存储用的,所以用这个新补码反推出其原码才是我们能读懂的二进制数字。

    补码:1111...1010

    反码:1111...1001

    原码:1000...0110      -----> -6

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

    再例如:

    ~(-3) = 2 的计算步骤:

    -3的原码:1000...0011

    -3的反码:1111...1100    原码转化为反码时,符号位不用取反

    -3的补码:1111...1101   内存中存的是补码

    取反操作:0000...0010    ------>    对3的补码取反得到新补码

    由新补码的符号位可以看出,该数字是个正数,故其原反补码相同

    所以,新补码 = 反码 = 原码:0000...0010      -----> 2

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

    快速求按位取反~:

    原数字(正数)加一后再加负号
    ~1 = -2  
    ~2 = -3
    ~3 = -4
    ~6 = -7
    ~9 = -10

    原数字(负数)加一后再加负号
    ~(-1) = 0
    ~(-2) = 1
    ~(-3) = 2
    ~(-6) = 5
    ~(-9) = 8

  • 相关阅读:
    对前端项目打包产物分析入库的好处
    项目进度管理
    Java8 新特性 函数式接口
    CMU 15-213 CSAPP. Ch11. Dynamic Memory Allocation
    vue 02 Vue模板语法
    将毫秒数述转为时分秒格式
    高考相关系列
    Redis基础命令(List类型)双链表
    【使用工具在Vs-code/WebStorm构建Vue项目】
    JAVA随机数真的随机吗?
  • 原文地址:https://blog.csdn.net/qq_56847032/article/details/134017286