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

其实主要是补码和浮点数表示中的指数阶码表示范围的一些想法,举个例子,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. PL/SQL编程:loop-if-exit-end循环算5的阶乘
  2. bzoj 2565: 最长双回文串 manacher算法
  3. java pkcs1转pkcs8_.NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接...
  4. 前端使用vue-i18n做中英文翻译
  5. python模块xlwt怎么用不了_python中使用 xlwt 操作excel的常见方法与问题
  6. 不等双十一,ChemDraw降价活动已经打开!
  7. 大白话5分钟带你走进人工智能-第二十六节决策树系列之Cart回归树及其参数(5)...
  8. MariaDB 脚本
  9. log4j2 logger_简单一致的Log4j2 Logger命名
  10. 自然语言10_分类与标注
  11. 运维笔记 - Nginx
  12. 信息科学 计算机 区别,电子信息科学技术和计算机科学技术有什么区别啊
  13. Oracle11g数据库快速安装
  14. JavaScript replace()
  15. 软件运行 计算机硬件环境,软件运行环境该怎么写
  16. java发送短信功能工具类及思路详解
  17. build up__css
  18. 骁龙855和Helio P90为什么没有与A12和麒麟980“相同”的NPU?...
  19. Win10的用户账户设置怎么取消?
  20. vue基础,加少量的webpack,以及脚手架搭建vue项目

热门文章

  1. 过山车java,杭电 acm 2063 ( 过山车 )
  2. 卷积、互相关、自相关
  3. 输出倒三角图案:在屏幕上显示如下倒三角图案
  4. 半入耳式蓝牙耳机评测:南卡蓝牙耳机和FIIL哪个更好?
  5. Python数据分析之Matplotlib(保姆级教程)
  6. 【转】Linux那些事儿 之 戏说USB(19)设备
  7. 鸿蒙三界巅峰实力最强大生物,三界最厉害的五位大神,简直太厉害,基本没有天敌!...
  8. 2018年互联网医疗模式创新案例分析:浙一互联网医院
  9. XuperChain 百度区块链简易学习帖
  10. MSO5204B/泰克Tektronix MSO5204B示波器