• 二进制补码


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

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

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

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

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

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

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

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

  • 相关阅读:
    最长回文 hdu3068(神代码)
    1297. Palindrome ural1297(后缀数组)
    705. New Distinct Substrings spoj(后缀数组求所有不同子串)
    Milk Patterns poj3261(后缀数组)
    Musical Theme poj1743(后缀数组)
    Conscription poj3723(最大生成树)
    Drying poj3104(二分)
    Finding LCM (最小公倍数)
    002 全局配置信息
    001 开始
  • 原文地址:https://www.cnblogs.com/ideawu1001/p/2791508.html
Copyright © 2020-2023  润新知