对于这个标题我也是无奈之举,实在想不出比较合适的标题,但我想陈述的问题其实很简单——有关二进制机械码范围问题的思考:

其实主要是补码和浮点数表示中的指数阶码表示范围的一些想法,举个例子,8位二进制补码表示范围为-128到127,而8位浮点数表示中的指数阶码表示为-127到128,这些小问题确实很头疼(尤其对于我这样的IQ不咋地人......),但好在最后还是想通了......言归正传,先从原反补码说起:

对于原反补码的最常用解释就是——

(1)原码——将十进制数真值绝对值转化为二进制,若真值为正,则在对应二进制数前加0,若为负则加1;

(2)反码——负数:将十进制数对应的二进数原码除符号位外按位取反,正数:和原码一致;

(3)补码——负数:将十进制数对应的二进制反码加1,正数:和原码一致;

以十进制数 -2 为例:

原码:110;

反码:101;

补码:110;

以上的解释是最长用的,但却不能解决以上问题,准确的说,以上解释仅仅是解释而非定义,在白中英教授的《计算机组成原理》中就对这些机械码做了函数上的定义,以补码为例:

【x】补 =  x , 2^n>x≥0 ;  2^(n+1)+x=2^(n+1)-|x| , 0≥x≥-2^n

而且通过这个定义,有了一个较标准的公式来计算补码到真值的转化:x=-2^n*xn+∑2^i*xi  (i=0 ; i -> n-1)①

这个式子中x为真值,为了解释这个式子,举两个例子:

T1:已知【x】补=010011011,求x=?

解:利用式①,得x = 0*2^8 + 1*2^7 + 0*2^6 + 0*2^5 + 1*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0=155

故x=155。

T2:已知【x】补=110011011,求x=?

解:利用式①,得x = -1*2^8 + 1*2^7 + 0*2^6 + 0*2^5 + 1*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = -256 + 155 = -101

故x=-101。

从以上两个例子就不难理解式子 ①了,那么我们可以回归正题了,以n+1位二进制为例:

这张图中就描述了n+1位二进制表示的范围,为了更详细点,以3位二进制数为例,此时n=2:

-3                 -2               -1                0                1                  2                   3

原码:                    111               110            101         100/000         001             010               011

反码:                    100               101           110          111/000         001             010               011

补码:    100           101               110           111             000            001              010               011

神奇的事发生了,多了一个100出来,按上图所示100应该为-2^2也就是-4的补码,但-4的原码为1100,按我们常用的解释求其反码按位取反得到其补码应该是1100,

也就是说-4有两个补码?还是说有一个不对,我们用式①验证一下,对于100,x = -1*2^2 + 0*2^1+ 0*2^0= -4, 对于1100, x= -1*2^3+1*2^2 + 0*2^1+ 0*2^0=-4,所以不难得出结论,这两个都是-4的补码,(这就是为什么我花大量篇幅去解释这个式子的原因)其实还-4的补码还不止这两个,因为-4的原码就有许多个,

比如10100,100100,1000100,......只要首位为1,末3位位100,中间无论多少个0表示的都是-4的原码,只是我们跟常用1100来表示-4的原码,按照按位取反加1,就可以得到许多个不同位数的补码了,我们所说的补码唯一是在规定二进制码位数的情况下某一个十进制数的补码是唯一的,只是-4的3位二进制补码无法求得其对应的原码而已,这就是为什么本文一开头就强调我们对机械码的表述仅仅是解释而非定义的原因,因为对于-4而言它没有3位下的二进制原码,所以也就无法由解释得到其3位二进制补码,而必须由补码的定义确认,而-4的3位二进制的补码的产生也正是由-0(也就是0)的反码得到的补码,这样0的补码就唯一了,由此推论到n次幂,这就成功解释为什么n+1位补码能多表示一个负数的补码,因为那是0让出来的位置,而它由满足补码定义,故它就是-2^n在n+1位下的补码。

说完了补码,再说说阶码,阶码是用来表示浮点数指数的编码,其采用的方式为移码表示法,对移码的定义同样也有一个式子,【e】移=2^k + e, (其中e为真值)而阶码所采用的移码则并非加的是2^k,而是加上的2^k-1,为什么要这样处理呢?我们看下图:

此图所描述的是当k=2时的各机械码表示,最后一行为移码,你发现了吗?00000000这个编码没有用上去,这是因为移动的位数为2^k,而当移动值为2^k-1时,-127所对应的阶码就是00000000了,那么+127就可以用11111110表示了,而11111111则表示的是+128,是不是顿时觉得这种移码表示的阶码很机智啊,成功的在有限位数条件下多表示了一个数,而且用移码表示阶码的优点也得到保存,那就是移码大的数其真值也大,在此就先总结这么多,仅为我的一点想法没若有不正确的地方还请诸位指出,,,在此感谢,,,balalalalala~~~

机械码补码,阶码的表示与范围思考总结相关推荐

  1. 原码、反码、补码、移码、尾码、阶码

    一开始学原码.反码.补码.移码.尾码.阶码这些码时,一个词头晕目眩.对我而言,在夜深人静的时候慢慢的去体会这些码,就像回到高中,在研究一道大家都不会的物理题,这只有经历过的人才能体会到其中的奥妙. 学 ...

  2. 计组 浮点数运算 /阶码定义/ 阶码是什么/ 尾数减法

    计组真的是非常头痛的一门学科,几年前数电学各种编码就各种算不对,现在又来了,总结两个自己混淆的知识,阶码和尾数减法,希望能帮到同样迷茫的朋友. 阶码的定义 1.阶码,书上根本每个清晰的定义,第一次提到 ...

  3. 原码_反码_补码_移码_阶码

    原码 原码是指一个二进制数左边加上符号位后所得到的码,且当二进制数大于0时,符号位为0:二进制数小于0时,符号位为1:二进制数等于0时,符号位可以为0或1(+0/-0). 反码 正数的反码是其本身:负 ...

  4. 简述计算机阶码表达什么,阶码

    在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码,阶码指明了小数点在数据中的位置. 中文名 阶码 外文名 exponent表示方法 定点数表示法 领    域 信息科学 ...

  5. 汇编学习笔记之阶码与移码

    原码反码补码都很常见,计算机中进行加减运算是用补码来进行运算的. 学习汇编时,见到了移码这个词,不太懂,经过这两天的理解,记录一下我的心得感受. 书上写的  正数 x=+11001,它的移码为 [x] ...

  6. IEEE754标准 阶码

    IEE754浮点数的格式: 阶码采用偏移量表示(某些课本会称为移码表示,但与普通移码略有差别),尾数用原码表示 注意:IEE754对阶码采用偏移量表示,单精度浮点数偏移值为127,双精度浮点数的偏移值 ...

  7. 补码浮点数运算(设数的阶码为3位,尾数为6位(均不包括符号位)按机械补码浮点运算规则完成下列[x+y]补运算。)

    题目描述:设数的阶码为3位,尾数为6位(均不包括符号位)按机械补码浮点运算规则完成下列[x+y]补运算. (1)x = 2011 x 0.100100, y = 2010 x (-0.011010) ...

  8. 原码,反码,补码,阶码,移码

    本文转载自本站大佬"不去上课",原文链接https://blog.csdn.net/ruidianbaihuo/article/details/87875178 原码,反码,补码, ...

  9. 为什么阶码使用移码表示而不用补码表示

    移码是对于某一个系列或集合的数使它们都映射到正数轴上 去,即在数轴上把数都统一往右移动n位,使得所有的数都不为负数.这里我们有E=e+01111111,所以对于所有 的E有E大于等于0.这里的话,由于 ...

最新文章

  1. php中perl配置,配置Apache及运行perl,php
  2. 一图读懂:中国科学院“基础研究十条”
  3. 解决redhat的未注册问题
  4. 叮!您有一份来自平安人寿的真AI情书
  5. ps、grep和kill联合使用杀掉进程(转)
  6. DateTime时间的比较问题
  7. git push时报错fatal: Could not read from remote repository.
  8. 与java线程有关的,线程多少和什么有关?大神们表示有话要说!
  9. java pattern split,Java中的Pattern splitAsStream()方法及其示例
  10. 蓝鸥iOS开发教程C语言——while语句
  11. 投资人常用的忽悠用语!
  12. JS版的bin2hex和hex2bin,支持汉字
  13. YDOOK:STM32: 芯片在线需求选型工具
  14. 小米MIUI夺冠!鲁大师发布2021年Q3季度UI排行!
  15. hangfire mysql_Hangfire 在.NET Core环境的使用
  16. 关于最新版go-cqhttp无法登录qq
  17. UG NX二次开发(C#)-曲线-NXOpen.Curve初探
  18. android应用备份,Android备份App及数据
  19. 数学与计算机科学学院英文,牛玉贞 - 福州大学 - 数学与计算机科学学院
  20. LSTM对比Bi-LSTM的电力负荷时间序列预测(Matlab)

热门文章

  1. 新唐NUC980配置ntp功能
  2. idea的maven项目出现橙色时钟图标解决方法
  3. 【图像分类】2022-ConvMixer ICLR
  4. red hat 6 安装php,Red Hat Enterprise Linux 6安装图解
  5. 微服务之Feign分布式RPC
  6. Java异常架构与异常关键字
  7. 三菱FX5U通讯控制台达VFD-S系列案例程序
  8. 请教关于reaver解pin 时的疑问
  9. somatic和germline突变有什么区别
  10. 一分耕耘 , 一分收获