• 关于非二进制的补码与反码


    有师弟来问导论作业,刚好最近数电也才复习过相关的内容,顺手整理复述一下查到的东西。

    关于名称

    补码应该叫Diminished Radix Complement,而反码则是Radix Complement。最常见的所谓1's complement与2's complement其实是是相对于2进制而言。

    也就是说,对于2进制,Diminished Radix Complement可称1's complement,Radix Complement可称2's complement。那么对于8进制,Diminished Radix Complement应称作7's complement而Radix Complement则为8's complement。

    注意,2's complement这个名字对于2进制指的是补码,而对于3进制就是反码了,以此类推。

    计算方法

    Diminished Radix Complement的算法

      设位数为n,需要计算的数字为N,属于r进制,则其反码((r-1)'s complement)为
      (rn – 1) – N
    计算时,rn-1用同样的进制表示比较方便,比如三位的10进制105-1就是99999,8进制的85-1就是(77777)8

    比如
      (AA)16的反码(15's complement)是(FF)16 - (AA)16 = (55)16
      (546700)10的反码(9's complement)是(999999)10 – (546700)10 = (453299)10
      (017)8的反码(7's complement)是(777)8 - (017)8 = (760)8
      (1011000)2的反码(1's complement)是(1111111)2 - (1011000)2 = (0100111)2

    这意味着一个数加上自己的反码得到的是rn-1,也就是10进制的99999,8进制的(77777)8这样

    Radix Complement的算法

      都和2进制的2's complement一样,Radix Complement=Diminished Radix Complement + 1
      或者说是(rn – 1) – N + 1,简化一下就是rn – N,不过用前者借位一般比较少(试想999-621与1000-621,哪个好算?),更加方便。

      (AA)16的补码(16's complement)是(FF)16 - (AA)16 + 1 = (56)16
      (546700)10的补码(10's complement)是(999999)10 – (546700)10 + 1= (453300)10
      (017)8的补码(8's complement)是(777)8 - (017)8 + 1 = (761)8
      (1011000)2的补码(2's complement)是(1111111)2 - (1011000)2 + 1 = (0101000)2

    这意味着一个数加上自己的补码得到的是rn,也就是一个1跟着一堆0,比如10进制的100000,8进制的(10000)8之类。

    参考资料:http://www2.southeastern.edu/Academics/Faculty/galkadi/297/notes/chapter1.doc(应当来自于M.Morris.Mano的一本书)

  • 相关阅读:
    套接字和域名系统DNS
    TCP滑动窗口控制流量的原理
    AngularJS 路由
    使用纯前端JavaScript 实现Excel IO
    Deferred在jQuery和Angular中的使用与简单实现
    深入理解函数声明和函数表达式(转)
    Visual Studio Code 智能提示文件
    JavaScript框架设计(四) 字符串选择器(选择器模块结束)
    JavaScript框架设计(三) push兼容性和选择器上下文
    canvas学习和面向对象(二)
  • 原文地址:https://www.cnblogs.com/joyeecheung/p/3348743.html
Copyright © 2020-2023  润新知