• 计算机中原码,反码,补码之间的关系


    原码是什么?

    • 原码就是早期用来表示数字的一种方式: 一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码

    • 举例说明:

      int类型的 3 的原码是 11B(B表示二进制位), 在32位机器上占四个字节,那么高位补零就得:

      00000000 00000000 00000000 00000011

      int类型的 -3 的绝对值的二进制位就是上面的 11B 展开后高位补零就得:

      10000000 00000000 00000000 00000011

    • 但是原码有几个缺点,零分两种 +0 和 -0 。很奇怪是吧!还有,在进行不同符号的加法运算或者同符号的减法运算的时候,不能直接判断出结果的正负。你需要将两个值的绝对值进行比较,然后进行加减操作 ,最后符号位由绝对值大的决定。于是反码就产生了。

    反码是什么 ?

    • 正数的反码就是原码,负数的反码等于原码除符号位以外所有的位取反

    • 举例说明:

      int类型的 3 的反码是:

      00000000 00000000 00000000 00000011

      和原码一样没什么可说的

      int类型的 -3 的反码是:

      11111111 11111111 11111111 11111100

      除开符号位 所有位 取反
      解决了加减运算的问题,但还是有正负零之分,然后就到补码了

        

    补码是什么?

    • 正数的补码与原码相同,负数的补码为 其原码除符号位外所有位取反(得到反码了),然后最低位加1.

    • 还是举例说明:

      int类型的 3 的补码是:

      00000000 00000000 00000000 00000011

      int类型的 -3 的补码是:

      11111111 11111111 1111111 11111101

      就是其反码加1

    最后总结一下:

    • 正数的反码和补码都与原码相同。
    • 负数的反码为对该数的原码除符号位外各位取反。
    • 负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1  

    各自的优缺点:

    • 原码最好理解了,但是加减法不够方便,还有两个零。。
    • 反码稍微困难一些,解决了加减法的问题,但还是有有个零
    • 补码理解困难,其他就没什么缺点了

    反码是如何解决加减运算的问题原因如下:

    计算机中加法运算比减法运算实现起来简单很多,对反码做减法运算可以将被减数看作 加上被减数的负数形式,也就是将被减数出符号为取反。
    

    补码是如何解决正负零之分的问题原因如下:

    在原码中,最高位是符号位。那么就存在正数0 -> 0000 0000 0000 0000,还存在负数0-> 1000 0000 0000 0000,这就存在两种0,反码也存在这个问题。 而在补码中,正数0 -> 0000 0000 0000 0000,假设存在负数0,那么按照补码的转换规则为 -> 1111 1111 1111 1111。可以看出这个数表示-2的15次方,不是-0,所以补码只有一个0。
    

    转自:https://www.cnblogs.com/hanhuo/p/6341111.html

  • 相关阅读:
    js中return、return true、return false的区别
    flask,中间键
    flask,自定义中间件
    flask,闪现
    flask获取前端发送过来的数据
    flask中的如何将后端写前端的代码设置session
    flask中的正则匹配
    flask中的四剑客 及其他参数
    支付宝接口
    flasks框架简介
  • 原文地址:https://www.cnblogs.com/yanguhung/p/10813524.html
Copyright © 2020-2023  润新知