2.2.1 定点数的表示 原码 反码 补码 移码

408 专栏收录该内容
79 篇文章 1 订阅

没有未来的未来不是我想要的未来 o(╥﹏╥)o (つД`)(ノへ ̄、)哭了

学习的是定点数的表示,那我们首先来认识一下什么叫定点数与定点数相对应的另一个概念叫做浮点数所谓定点数就是指小数点的位置固定不变,而浮点数是小数点的位置是不固定的,不会浮动,那么大家熟悉的实际之数来类比的话,啊,所谓定点数就是我们平时更习惯使用的这种常规的几种方式,我们会显示的标明小数点的位置,而浮点数呢,就是我们用科学计数法表示的啊,这种数,虽然我们把小数点的位置标注在了这个地方,但是如果在乘上我们给出的这个接码,那么我们的这小数点其实是会往后移的,那这是我们熟悉的实际值,其实对于二进制也是类似的,二进制的数据表示也分为定点数和浮点数虽然都是0101组成的,但是我们终归需要确定这个小数点的一个位置,那如果我们规定小数点的位置固定不变,这就是定点数,如果我们还需要加上一个类似于科学技术法的这种接法,那么这种数就是浮点数那玩到书里不分讲的是钉钉里面则表示怎么进行加减乘除这些预算二点三这个学习服务的表示和运算我们。读点数的表示和运算,那这个小姐我们先学习定点数则表示分为无符号数和有符号数,其中有符号数可以用原码反码补码,起码这样的4种方式来表示,那这个小结是很重要的基础,同时也是考试的重点,我们需要重点关注这几种码之间的相互转换问题啊,首先我们先看一下比较简单的无符号数所为无符号数,就是指整个机器字长的全部二进制位都是用来表示数值,并没有正负这样的符号之分,相当于我们是用所有的二斤之味来表示数的绝对值,比如像这个二进制数,它所对应的10进制就应该是156,那具体怎么转换,这个是我们在之前的小结中已经重点强调过的内容,就是用每一位二进制数乘以这一位的位权,然后所有的未进行一个相乘相加就可以,那我们需要重点探讨一个问题,就是无符号数的表示范围是多大?那既然要聊他的表示范围,我们自然需要确定一个前提条件就是我们到底有多少个被一个月大比如表示一个屋总共可以有二。这总共可以有2的8次方种状态,分别是泉灵道权益,那所有的二进制位都为一这个二进制数所对应的真值应该是多少呢?可以用很多种思路来确定这个二进制数所对应的真值,首先最土的办法,我们是不是可以把每一位阿和为全乡城乡家那8个二进制位就相当于是2的7次方+2的6次方加一直加到2的0次方,那这是一个简单的等比数列求和问题得到的结果,应该是2的8次方减,一大2的8次方-1应该是=255,所以8位2进制数他表示的范围数值范围就应该是0~255这样的一个范围,那这是用每一位×自己的为全乡城乡嫁这样的方式算出来的一个值,我们再介绍一种思路来算8个一所表示的值,现在我们给这8个一再加上一个1那么末位,1+1=0向高位进,11+1又=0,再向高位进一好,那所有的这些都是等于0进1我们会更高更高的这个we他的全是应该是二次方因为他是第九个二进制位这个值的基础上加一等于二。原先这个值的基础上加1=2的8字方步就是2的8次方减1吗,所以我们也可以用这样的思路来确定啊,二姨它所表示的一个值,那是我把刚才这种思路在进行一个推广的话,分位的无符号数,它能表示的范围竟然就应该是0~2的N次方-1号,所以这是恩为无符号数的一个表示范围,所有的二进制位都是用来表示数值而没有符号位,所以称为无符号数,那一般来说,当我们谈到无符号数的时候,我们通常只会讨论无符号的整数,而没有无符号的小数这一点大家应该是有感受的啊,比如大家学习C语言的时候,他有一个关键字叫on scient这个关键字你只能用来修饰按sign into或者long这些整数相关的关键字大家可以去试一下,如果要按sign去修饰flott就是这种浮点数的话,那它的变异其实是会报错的,所以当我们在谈到这种无符号数的时候,通常我们只会探讨整数符号的整数,而不会探讨小树这是我们既需要考虑到整数表示要考虑到束河镇整数的话。是也需要考虑到小数如何表示,那如果要表示整数的话,我们通常会规定小数点是固定的隐含在最低位的后面,然后最高位的这个二进制位表示的是符号位,通常零表示的是正,然后一表示的是负,另外如果我们要用定点的方式表示小数的话,我们通常会规定最高位为符号位小数点隐含在这个符号位的后面,因此如果我们用这种定点的方式来表示一个比如说是19.75这样的数的话,那我们需要把整数部分单独的保存,然后把小数部分单独的保存,那我们可以用源码反码补码,这样的三种方式来表示定点的整数或者小数,另外还可以用移码来表示定点的整数,这个我们一会会展开在之后的讲解中,如果我们把真值记为X的话,那我们会用这种X加一个钟货号,然后右下角的标注园方不以这样的方式来表示,所对应的原码反码5码合1吗表示整数或者小数的素质不分的这些是为我们就把车。尾数然后最高位我们完成了一个符号位好,接下来我们先来看最简单的源码,那所谓源码呢,就是指我们会用尾数来表示增值的一个绝对值,其实就是之前我们一直在探讨的大家比较熟悉的那种二进制数表示方法,那我们假设机器自产是8倍啊,也就是说我们有一位用来表示符号,然后剩下的7位用来表示数值也就是尾数好,首先来看一下硬点整数用元码怎么来表示每个定点整数占8个比特类最高位是负号,然后后续每一个位的全值啊,在这已经标出来了,那如果说我们要用源码的方式表示正的19的话,首先符号位正号应该是对应0,然后后续的这7个尾数我们需要表示成这个真值的绝对值,也就是19 19,应该是等于16+2再+1所以19所对应的二进制就应该是1+2再加16是16,应该是2的4次方好,所以19的尾数就应该是001 001,那如果我们要表示的是-19的话,是不是只需要把符号位从0变为1就可以了,好,所以这个是19和-19的一个源码表示我们的定点整数小数捡拾默认。就可以了啊,所以这就是19和-19的一个原码表示,所以我们的定点整数小数点是默认银行在了最后面这个位置,所以我们才可以确定这一位的位权是2的零次方再往上一位是2.1次方,如果说我们规定小数点已经含在这个位置,那是不是意味着小数点左边这一位的全值是2.0次方再往上是2的一次2~2次2的三次,而小数点往右的这几位全值就会变成2的-1,2的-22的-3变成这样的一个情况,好,所以我们这儿确定各个位的权值,其实是基于我们小数点的这个隐含位置来进行判断的,好呐,这是用原码表示的定点整数,而且呢就是我们手机的那种表述方式,只不过如果题目规定了啊,我们的这个定点整数它需要占多少位的这些部分补上灵儿,接下来看定点小数的一个原码表示由于我们的小数点后面跟着一位是零点五零点二五d三五年。呃-1往后是2的-2-3啊,一直到2的-7也就是第1位是0.5,第2位是0.25,第3位是0.125,好后续的就不再展开好,那正的0.75怎么表示呢?0.75应该刚好是=0.5加上0.25,所以尾数部分肯定是两个1,然后后续全部是0,那正的0.75,我们只需要让负号位为0就可以,而负的0.75我们把负号位从0改成1,然后尾数依然是不变的,所以这就是定点小数的一个源码表示同样的,如果题目告诉我们机器字长的位数或者指明了原码需要占多少位的凑足规定的位数,在课本和题目里面,大家也经常会见到这样的一种呃书写的方式,就有的地方可能会在符号位后面打一个小小的逗号啊,但是这个逗号其实是不存在的,是我们脑补上去的,这么写只不过是为了让大家更好的区分符号位,还有尾数这样的两个部分如果没有明确的指令机器字长是多少多少倍。负这样的两个部分,另外如果没有明确的指明机器自成是多少,源码需要占多少位,那么像刚才付19这个数,我们也可以写成1然后后面跟这样的一串,也就是把刚才我们补上的啊,两个0给去掉那类似的在书上表示定点小数的时候,也可以写成这样的一种形式啊,这个地方是一个小点点,而不是逗号,这个小数点前面这一位是符号而不是数值,所以这个是我们不能把它理解为是1.11,而应该把它理解为是负的0.11啊,这是大家看书做题的时候,有可能会遇到的一种写法好,接下来我们要关注的是源码的一个表示范围,先探讨源码表示定点整数的一个表示范围,总共有an加一位,其中尾数有N个未,那么a位的位数可以表示的绝对值的范围应该是0~2的N次方减1应该是这样的一个范围刚才无符号数那个地方跑过表示这样的一个范围让我们再加上符号位的。一直的范围应该是0~2的N次方减1,应该是这样的一个范围,这个结论刚才我们在无符号数那个地方探讨过好,那尾数可以表示这样的一个范围,那我们再加上符号V的话,最小的我们可以表示的整数就应该是负的啊,2N次方减一而正的可以表示的最大整数就应该是2的N次方减1好,这里应该很好理解,那唯一一点需要注意的是用原码表示定点整数,我们在表示真值0的时候可以有正0和-0这样的两种形式,正零就是符号位为0,然后后续的尾数也全部是0,而-0就是符号位为1,后续的尾数全部是0,因此虽然N加一个二进制位可以表示出R的N+一次方这么多种啊,不同的状态,理论上我们也可以表示出这么多个数,但实际上你数一下在这个范围内,其实只包含了2的N次方加1,然后再减1这么多个数,原因就是其中的两个二进制状态对应了同一个真值阿。对真值好,这一点大家需要注意,那接下来我们再来看用原码表示定点小数的一个表示的范围,总共N加一个位,其中一个位表示符号,后边的N位表示实际的数值,那么这N个2进制位所能表示的一个,呃,绝对值的范围应该是最小是0,就是所有都是0,然后最大的话就是所有都是一所有的V都是1,那么它所对应的值就应该是2的负一次方,加上2的-2次方一直加加++到2的负N次方,因为我们总共有N位,那么这个值加出来就应该是=1-2的负N次方,因此当我们规定小数点的位置在这个地方的时候啊,这N个倍数所能表示的范围绝对值的范围就应该是0~1-2的负N次方好,如果再加上符号为正负的话,那它所能表示的最小值就应该是这样的,一个值最大值就应该是1-2的,负N次方是小数和之前一样我们在表示真挚名的首胜。同样也可以有证明和复0这样的两种形式好,那这就是用元码表示定点整数和定点小数的一个方法,还有表示的范围,大家需要特别注意,真值名是有两种表示形式的好,接下来看反马反马其实很简单,当我们得到源码之后啊可以判断,如果说原码的符号位为0,也就是是一个正数,那么反码和原码其实是相同的,而如果说符号位为1,那么我们只需要在原码的基础上把数值位全部取反就可以,比如像刚才郑19这个数的原码是这样子,那由于此时符号位为0,它是一个正数,所以这个数的反码表示和原码表示是一样的,而-19这个数为1,所以我们需要把后边的这些数值位在源码的基础上全部取反,就是0变成11变成0全部取法,这样的话就得到了-19的一个砝码好再来看,小数小数也是一样的,正的0.75所以和原码是一样的衣服好看。不持久的一个砝码好再来看小数小数也是一样的,正的0.75由于符号位为0,所以砝码和源码是一样的,保持不变,而负的0.75由于符号位为一所以反码的这些数值位,需要在源码基础上全部选择0.11好,所以这就是定点整数和定点小数的砝码,表示我们需要先得到源码,然后再转变成砝码,那显然砝码和源码之间是有这种11对应的关系的,所以N加一位的砝码整数它的表示范围和源码肯定也是一致的,同样的砝码也会拥有复0和正0这样的两种形式源码的证明是全为0,那砝码的证明也是全部为0元,马地缚灵是首位,唯一后面全部是0,那根据我们转换的规则,由于符号位为1,所以啊-0所对应的砝码就应该是一后边全部变成一除了反码的整数之外,砝码的小树和源码也是一一对应的,所以砝码的小树的一个表示范围与原码也是相同的,同样富临河镇临会有两种形式这就是所谓的方法吗。有两种形式好,那这就是所谓的砝码那砝码啊,只是源码中变成无码的这个过程当中的一个中间状态,其实在实际当中砝码并没有太大的用处,计算机硬件不会使用砝码直接进行加减乘除这些运算好的,那这就是砝码,接下来我们要探讨如何基于砝码来得到补码,对于一个正数来说正数的补码,它所对应的不嘛其实就是圆满,而对于一个负数来说复数所对应的不满,我们可以用法码的末位加1这样的方式迅速地进行转化,那加1的过程中我们需要考虑到敬畏的问题,首先来看用补码来表示钉点的整数十九这个数来说他的源码是这样子由于他是一个证书所以这个其实和原码是一模一样的十九由于这个只是一个符号为一因此我们在这个真值所对应的。因此我们在求这个真值所对应的补码的时候,就需要先把源码的这些尾数全部取反得到砝码,然后再在砝码的末尾这一位再加上一个一因此-19所对应的补码就应该是这个样子啊,比起砝码来说,末位加了一个一好再来看一个M码表示的小数正的0.75,这个小数它的源码是这样,那由于这是一个正数,所以它所对应的补码形式和源码是一模一样的,我们只需要把源码照搬下来就可以然后再来看负的0.75,由于它是一个负数,所以我们首先需要把源码的尾数部分全部取法,然后再在砝码的末位加上一个1,那需要注意进位的问题,末位的这两个1相加等于0往高位进,11+1又=0,再往高位进1,那直到进到这个位置林加一等于几就不会再为了这就是负的零点七五十五码形式小节中。这是它所对应的补码形式,在这个小结中,大家先把注意力放在如何在各种马之间进行转换,先放在这个地方,下一小节我们再来解释古马这些东西有什么作用,好接下来我们再来看一下补码,是不是也会有正0和-0这样的啊问题,首先看证明由于符号位为0,所以按照刚才我们提出的这个规则符号位为0,那么它所对应的补码正0,所对应的补码和源码是一样的,都是0好再来看-0,由于符号位为1,所以我们把它看为一个负数,因此-0它所对应的补码形式应该是先把它转换成砝码,然后再在砝码的末位加1,也就是8个1的末位再加一个1,那这个加法的结果应该是8个0,然后更高位,第9个位会进一个一但是由于这地方我们规定机器字长只有八个we所以我们向更高未竟的这个一奇石会被丢弃而第八位留下的这八个零是不是和我们刚才推出的震林这种状态。用补码的形式来表示真值,零它只会有一种表示形式,就是全0这种方式好,那问题来了,源码当中有两个二进制的状态会对应0这个真值,而在补码中只有其中一种状态表示0,那多出来的这种二进制状态怎么办呢,对于这个问题我们有一个特别的规定,对于定点整数的补码来说,如果符号位为1,然后后续这些都是0的话,那么我们规定这个补码,它所对应的数值是负的2的7次方,这有7位表示数值和-2的7次方,这个7是相对应的,那还记不记得对于8位的元码和反码来说,8位所能表示的最小数值应该是负的2的7次方减1对吧?而对于补码来说它可以多表示一个负数,最小可以表示到负的2的7次方因此如果机器字长是人家一位数的表示范围应该是这样的会比原码和food二的这点大家也注意。用补码表示定点的整数,而如果用补码表示定点小数也有类似的问题,由于正0和-0只有一种表示形式,因此多出来的这个二进制状态也就是符号位为一后续全为0,这种状态,我们会规定它所对应的值是负一元码和砝码所能表示的最小值,应该是负的1-2的负N次方是这样的一个值而补码可以多表示一个负1,而因此同样是N加一个比特位补码会比原码反码的表示范围更多一个数,不管是整数还是小数都这样好,刚才我们已经知道了对于给定的一个正数或者负数,如何从源码转换到补码,如果我们知道了一个正数的补码,那么想要知道它所对应的源码是很容易的,因为正数的原码和补码是相同的,但是如果给你一个负数的补码符号位为1,那么想要推出它所对应的原码应该怎么办呢?其实这个逆向转换的过程和正向转换的过程是一样的,同样是让美术全部取反,然后末位加1号来看一下想要的未来 o(╥﹏╥)o (つД`)(ノへ ̄、)

 

 

  • 3
    点赞
  • 0
    评论
  • 11
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值