zoukankan      html  css  js  c++  java
  • 补码是怎么来的?

    首先,8位二进制可以表示2^8 = 256个数,很自然可以把它们对应到0到255

    但是负数如何表示呢?

    很容易想到,如果第一位是0,就是正数,第一位是1就是负数

    于是0000 0000B到0111 1111B就是正数,对应0到127

    剩下的1000 0000B到1111 1111B就用来表示负数

    正数的对应关系是直接参考了最开始的对应关系,那么负数如何对应呢?

    为了计算机设计简洁,计算机中只有加法器,对于a-b则变化为a+(-b)

    我们希望b+(-b) = 0是满足的,所以-b = 0 - b,也即是对于8位二进制我们选择模为1 0000 0000B(不明白可以参考这里)

    那么-127的二进制就是 1 0000 0000B - 0111 1111B = 1000 0001B

    于是从1000 0001B到1111 1111B与-127到-1相对应

    最后剩下1000 0000B没有指定它代表的数

    可以想到的几个比较合理的备选数是0,128,-128

    因为0000 0000B表示0,没有必要1000 0000B也来表示0

    因为1000 0000B开头是1,按照之前的规则应当是个负数,所以128不合适

    1000 0000B = 1100 0000B+1100 0000B = -64-64 = -128

  • 相关阅读:
    to_char &&to_date
    java中Integer 与 String 类型的 相互 转换
    group by 的用法
    谈 计算时间的天数差
    领域建模
    Java Classloader详解
    阿里巴巴Java招聘
    Maven Archetype
    负载均衡
    Maven
  • 原文地址:https://www.cnblogs.com/N3ptuner/p/12625761.html
Copyright © 2011-2022 走看看