博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于非二进制的补码与反码
阅读量:5121 次
发布时间:2019-06-13

本文共 1379 字,大约阅读时间需要 4 分钟。

关于名称

补码应该叫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之类。

 

参考资料:(应当来自于M.Morris.Mano的一本书)

转载于:https://www.cnblogs.com/lishuo1607/p/4812857.html

你可能感兴趣的文章
Day19内容回顾
查看>>
第七次作业
查看>>
SpringBoot项目打包
查看>>
Linux操作系统 和 Windows操作系统 的区别
查看>>
《QQ欢乐斗地主》山寨版
查看>>
文件流的使用以及序列化和反序列化的方法使用
查看>>
Android-多线程AsyncTask
查看>>
第一个Spring冲刺周期团队进展报告
查看>>
红黑树 c++ 实现
查看>>
Android 获取网络链接类型
查看>>
linux中启动与终止lnmp的脚本
查看>>
gdb中信号的处理[转]
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
Jzoj4757 树上摩托
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
第一个Java Web程序
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>