• 原码,反码,补码 以及 位运算


    1. 原码,反码,补码 的总结 (熟背)

    1. 二进制的最高位是符号位:0表示正数,1表示负数
    2. 正数的原码,反码,补码都一样
    3. 负数的反码 = 原码的符号位不变 其它位取反 (0 > 1, 1 > 0)
    4. 负数的补码 = 反码 + 1,负数的反码 = 补码 -1
    5. 0的反码,补码都是0
    6. 没有无符号的数
    7. 在计算机运算的时候,都是以 补码的方式来运算
    8. 当我们看运算结果的时候,要看它的 原码

    2. 原码

    • 十进制数据的二进制表现形式就是原码,原码最左边的一个数字就是符号位,0为正,1为负
    • 左边第一位为符号位,其他位为数据位。
    • 一个 byte 有 8bit,最大值是 0 1 1 1 1 1 1 1 (+127),最小值是 1 1 1 1 1 1 1 1 (-127)
    // 5 的二进制 
    var num1 = 5
    num1.toString(2)
    //  00000101
    // 那么-5的二进制就是 10000101
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3. 反码

    • 正数的原码,反码,补码都一样
    • 负数的反码 = 原码的符号位不变 其它位取反 (0 > 1, 1 > 0)
    • 负数的反码 = 补码 -1
    // 	计算 -5的反码
    	5的原码 00000101
    	-5的原码 就是 10000101
    	符号位不变其他位取反
    	那么-5的反码 就是 11111010
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4. 补码

    • 正数的原码,反码,补码都一样
    • 负数的补码 = 反码 + 1
    // 还是以-5举例
    	上面-5的反码是 11111010 那它的补码加1就是
    	11111010 (-5的反码)
    +	00000001 (加1)
    ------------------
    	11111011 (补码)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5. 加减运算(补码的方式来运算)

    • 在计算机运算的时候,都是以 补码的方式来运算
    1. 解释一下 3 + 5 二进制运算过程

      将 3 和 5 转换为二进制数:
      3 的二进制补码表示为 00000011。
      5 的二进制补码表示为 00000101。
      执行二进制加法,考虑进位:

       00000011   (3 的二进制补码)
    +  00000101   (5 的二进制补码)
    -----------
       00001000 
    
    • 1
    • 2
    • 3
    • 4

    结果为 00001000 。

    将结果转换回十进制,根据最高位的符号位决定正负:

    结果为正数,因为最高位为 0,表示正数。
    去除符号位 0,剩下的位数为 00001000,转换为十进制为 8。
    因此,3 + 5 的结果是 2。

    1. 解释一下 -3 + 5 二进制运算过程

      将 -3 和 5 转换为二进制数:
      -3 的二进制原码:10000011 反码:11111100 补码: 11111101。
      5 的二进制表示为 00000101。
      执行二进制加法,考虑进位:

      11111101   (-3 的二进制补码)
    + 00000101   (5 的二进制)
    -----------
    1 00000010   (结果的二进制补码,其中最高位表示进位,超出位舍去)
    
    • 1
    • 2
    • 3
    • 4

    结果为 00000010,其中最高位的 1 表示进位。

    将结果转换回十进制,根据最高位的符号位决定正负:

    结果为正数,因为最高位为 0,表示正数。
    去除符号位 0,剩下的位数为 00000010,转换为十进制为 2。
    因此,-3 + 5 的结果是 2。

    1. 解释一下 -5 + 3 二进制运算过程

      将 -5 和 3 转换为二进制数:
      -5 的二进制原码:10000101 反码:11111010 补码:11111011
      3 的二进制表示为 00000011。
      执行二进制加法,考虑进位:

      11111011   (-5 的二进制补码)
    + 00000011   (3 的二进制)
    -----------
      11111110   (结果的二进制补码,最后结果要原码展示)
    
    • 1
    • 2
    • 3
    • 4

    因为最高位为 1,表示负数。
    负数的反码 = 补码 -1

      11111110   
    - 00000001   
    -----------
      11111101 
    
    • 1
    • 2
    • 3
    • 4

    它的反码就是 11111101 取反的原码就是 10000010
    因此,-5 + 3 的结果是 -2。

    6. 位运算

    1.按位与&
    按位与运算符(&)是将两个数的二进制位对应位置相与,如果都是1,则结果为1,否则为0。例如,3 & 5的结果为1。

      00000011  (3的二进制)
      00000101  (5的二进制)
    -----------
      00000001  (所以结果就是1,下面的运算同理)
    
    • 1
    • 2
    • 3
    • 4

    2.按位或 |
    将两个数的二进制位对应位置相或,如果有一个是1,则结果为1,否则为0。

    3.按位异或 ^
    将两个数的二进制位对应位置不一样就是1,一样就是0。

    4.按位取反 ~
    按位取反运算符是将一个数的二进制表示中的0变为1(符号位也会取反),1变为0。例如,~3的结果为-4。

    5.左移 <<
    符号位不变,右侧补0。

    6.右移 >>
    符号位不变,并用符号位补高位

    7.无符号右移 >>>
    无符号右移运算符(>>>)是将一个数的二进制表示向右移动指定的位数,符号位要跟着右移,左侧补0。

  • 相关阅读:
    电流探头的干扰源电流谱测试
    GAN-Tutorial procedural record
    Mysql卸载
    C++实测无锁队列concurrentqueue、boost.spinlock 和 std::mutex 在多线程情况下的性能表现
    MCE | 神经退行性疾病——比癌症更残忍
    Angular安全专辑之五 —— 防止URL中敏感信息泄露
    GBASE 8C——SQL参考6 sql语法(11)
    想要精通算法和SQL的成长之路 - 存在重复元素
    【网络安全的神秘世界】XSS基本概念和原理介绍
    《HTTP/2 In Action 中文版本》小结
  • 原文地址:https://blog.csdn.net/jiandan1127/article/details/131089713