• 二进制补码


    在本科微机原理中就早早地接触过补码这个概念,但是对其的理解仅仅停留在原码取反加一的程度,至于为什么提出这个,这个有什么用,怎样得到取反加一这条法则等问题,当时我是稀里糊涂的。现在再回过头来看,要更精确地理解其内涵。

    首先我们要明确的一点事这些码都是编码,编码就是用二进制数来表示特定的数字和符号,比如asc码就是用八位二进制数来表示英文字母和各种符号,同理我们也可以用二进制数表示数字大小。

    这里我们先对编码的形式进行统一的假设:编码一共w位,[xw-1,xw-2,...,x0],其中每一位不是0就是1.

    接下来我们先看无符号数的表示。无符号数的理解起来很简单直观,用一个公式进行总结就很直观,后面的补码也用公式总结才足够方便理解。

    这样的翻译编码的方式只能用来表示无符号数。对于很多应用我们还希望表示负数值,所以不能采用上面的翻译编码的方式。

    因此我们采用下面的公式进行编码翻译:

    这就称为二进制补码。从公式中可以看出,最高位如果是1的话,一来就从-2w开始往上加正数,但是正数的绝对值是小于2w的所以怎么加都不可能使最终值为正;如果第一位为0的话,第一项就不存在,也就是直接加正数。综上我们可以看出第一位决定正负。补码还存在一些不太自然的特性,不对称,也就是说最大的复数取相反数得到的正数是用这个编码表示不了的,但与此同时他带来了一个很自然的特性,就是0的编码只有一种,这一点与什么反码和符号数的古怪属性:0有两种不同的编码完全不同。

    最重要的一点就是几乎所有的的现代机器都是用二进制补码!!!

  • 相关阅读:
    bzoj 2038
    ACM训练联盟周赛 A. Teemo's bad day
    The 2018 ACM-ICPC China JiangSu Provincial Programming Contest J. Set
    惊艳,Dubbo域名已改,也不再局限于Java!
    6月份值得一看的 Java 技术干货!
    90 % Java 程序员被误导的一个性能优化策略
    Spring Cloud Finchley 正式发布,包含 4 个重大更新!
    Java 11 快要来了,编译 & 运行一个命令搞定!
    Spring Boot 单元测试详解+实战教程
    Java 10 实战第 1 篇:局部变量类型推断
  • 原文地址:https://www.cnblogs.com/ideawu1001/p/2791508.html
Copyright © 2020-2023  润新知