学习电脑信息原码反码补码详细解析.pdf

上传人:ylj18****70940 文档编号:71497074 上传时间:2023-02-03 格式:PDF 页数:5 大小:224.85KB
返回 下载 相关 举报
学习电脑信息原码反码补码详细解析.pdf_第1页
第1页 / 共5页
学习电脑信息原码反码补码详细解析.pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《学习电脑信息原码反码补码详细解析.pdf》由会员分享,可在线阅读,更多相关《学习电脑信息原码反码补码详细解析.pdf(5页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、.原码原码,反码反码,补码补码 详细解析详细解析一一.机器数和真值机器数和真值在学习原码,反码和补码之前,需要先了解机器数和真值的概念.1 1、机器数、机器数一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为 0,负数为 1.比如,十进制中的数+3,计算机字长为 8 位,转换成二进制就是 00000011。如果是-3,就是 10000011。那么,这里的 00000011 和 10000011 就是机器数。2 2、真值、真值因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数10000011,其最高位 1 代

2、表负,其真正数值是-3 而不是形式值 131 10000011 转换成十进制等于 131。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。例:0000 0001 的真值=+000 0001=+1,1000 0001的真值=000 0001=1二二.原码原码,反码反码,补码的基础概念和计算方法补码的基础概念和计算方法.在探求为何机器要使用补码之前,让我们先了解原码,反码和补码的概念.对于一个数,计算机要使用一定的编码方式进行存储.原码,反码,补码是机器存储一个具体数字的编码方式.1.1.原码原码原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值.比如如果是 8位

3、二进制:+1原=0000 0001-1原=1000 0001第一位是符号位.因为第一位是符号位,所以 8 位二进制数的取值范围就是:1111 1111,0111 1111即-127,127原码是人脑最容易理解和计算的表示方式.2.2.反码反码反码的表示方法是:正数的反码是其本身负数的反码是在其原码的基础上,符号位不变,其余各个位取反.+1=00000001原=00000001反-1=10000001原=11111110反可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值.通常要将其转换成原码再计算.3.3.补码补码补码的表示方法是:正数的补码就是其本身.负数的补码是在其原码的基础上,符

4、号位不变,其余各位取反,最后+1.+1=00000001原=00000001反=00000001补-1=10000001原=11111110反=11111111补对于负数,补码表示方式也是人脑无法直观看出其数值的.通常也需要转换成原码在计算其数值.三三.为何要使用原码为何要使用原码,反码和补码反码和补码在开始深入学习前,我的学习建议是先死记硬背上面的原码,反码和补码的表示方式以及计算方法.现在我们知道了计算机可以有三种编码方式表示一个数.对于正数因为三种编码方式的结果都相同:+1=00000001原=00000001反=00000001补所以不需要过多解释.但是对于负数:-1=10000001

5、原=11111110反=11111111补可见原码,反码和补码是完全不同的.既然原码才是被人脑直接识别并用于计算表示方式,为何还会有反码和补码呢?首先,因为人脑可以知道第一位是符号位,在计算的时候我们会根据符号位,选择对真值区域的加减.但是对于计算机,加减乘数已经是最基础的运算,要设计的尽量简单.计算机辨别符号位显然会让计算机的基础电路设计变得十分复杂!于是人们想出了将符号位也参与运算的方法.我们知道,根据运算法则减去一个正数等于加上一个负数,即:1-1=1+=0,所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了.于是人们开始探索 将符号位参与运算,并且只保留加法的方法.首先来看

6、原码:计算十进制的表达式:1-1=01-1=1+=00000001原+10000001原=10000010原=-2如果用原码表示,让符号位也参与计算,显然对于减法来说,结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.为了解决原码做减法的问题,出现了反码:计算十进制的表达式:1-1=01-1=1+=0000 0001原+1000 0001原=0000 0001反+1111 1110反=1111 1111反=1000 0000原=-0发现用反码计算减法,结果的真值部分是正确的.而唯一的问题其实就出现在0这个特殊的数值上.虽然人们理解上+0 和-0 是一样的,但是 0 带符号是没有任何意

7、义的.而且会有0000 0000原和1000 0000原两个编码表示 0.于是补码的出现,解决了 0 的符号以及两个编码的问题:1-1=1+=0000 0001原+1000 0001原=0000 0001补+1111 1111补=0000 0000补=0000 0000原这样 0 用0000 0000表示,而以前出现问题的-0 则不存在了.而且可以用1000 0000表示-128:+=1000 0001原+1111 1111原=1111 1111补+1000 0001补=1000 0000补.-1-127 的结果应该是-128,在用补码运算的结果中,1000 0000补就是-128.但是注意因

8、为实际上是使用以前的-0 的补码来表示-128,所以-128 并没有原码和反码表示.使用补码,不仅仅修复了 0 的符号以及存在两个编码的问题,而且还能够多表示一个最低数.这就是为什么8位二进制,使用原码或反码表示的范围为-127,+127,而使用补码表示的范围为-128,127.3131因为机器使用补码,所以对于编程中常用到的32位int类型,可以表示范围是:-2,2-1因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.四四 原码原码,反码反码,补码补码 再深入再深入计算机巧妙地把符号位参与运算,并且将减法变成了加法,背后蕴含了怎样的数学原理呢?将钟表想象成是一个1位的12进制

9、数.如果当前时间是6点,我希望将时间设置成4点,需要怎么做呢?我们可以:1.往回拨 2 个小时:6-2=42.往前拨 10 个小时:mod 12=43.往前拨 10+12=22 个小时:mod 12=42,3 方法中的 mod 是指取模操作,16 mod 12=4 即用 16 除以 12 后的余数是 4.所以钟表往回拨的结果可以用往前拨替代!现在的焦点就落在了如何用一个正数,来替代一个负数.上面的例子我们能感觉出来一些端倪,发现一些规律.但是数学是严谨的.不能靠感觉.首先介绍一个数学中相关的概念:同余同余的概念同余的概念两个整数 a,b,若它们除以整数 m 所得的余数相等,则称 a,b 对于模

10、 m 同余记作 a b 读作 a 与 b 关于模 m 同余。举例说明:4 mod 12=416 mod 12=428 mod 12=4所以 4,16,28 关于模 12 同余.负数取模负数取模正数进行 mod 运算是很简单的.但是负数呢?下面是关于 mod 运算的数学定义:上面是截图,取下界符号找不到如何输入.下面是使用L和J替换上图的取下界符号:x mod y=x-y L x/y J上面公式的意思是:x mod y 等于 x 减去 y 乘上 x 与 y 的商的下界.以-3 mod 2 举例:.-3 mod 2=-3-2xL-3/2 J=-3-2xL-1.5J=-3-2x=-3+4=1所以:m

11、od 12=12-2=10 mod 12=12-4=8 mod 12=12-5=7开始证明开始证明再回到时钟的问题上:回拨 2 小时=前拨 10 小时回拨 4 小时=前拨 8 小时回拨 5 小时=前拨 7 小时注意,这里发现的规律!结合上面学到的同余的概念.实际上:mod 12=1010 mod 12=10-2 与 10 是同余的.mod 12=88 mod 12=8-4 与 8 是同余的.距离成功越来越近了.要实现用正数替代负数,只需要运用同余数的两个定理:反身性:a a 这个定理是很显而易见的.线性运算定理:如果 a b,c d 那么:a c b d a*c b*d 如果想看这个定理的证明

12、,请看:http:/ 7 10 7-2 7+10 现在我们为一个负数,找到了它的正数同余数.但是并不是 7-2=7+10,而是 7-2 7+10 ,即计算结果的余数相等.接下来回到二进制的问题上,看一下:2-1=1 的问题.2-1=2+=0000 0010原+1000 0001原=0000 0010反+1111 1110反先到这一步,-1 的反码表示是 1111 1110.如果这里将1111 1110认为是原码,则11111110原=-126,这里将符号位除去,即认为是 126.发现有如下规律:mod 127=126.126 mod 127=126即:126 2-1 2+126 2-1 与 2

13、+126 的余数结果是相同的!而这个余数,正式我们的期望的计算结果:2-1=1所以说一个数的反码,实际上是这个数对于一个膜的同余数.而这个膜并不是我们的二进制,而是所能表示的最大值!这就和钟表一样,转了一圈后总能找到在可表示范围内的一个正确的数值!而 2+126 很显然相当于钟表转过了一轮,而因为符号位是参与计算的,正好和溢出的最高位形成正确的运算结果.既然反码可以将减法变成加法,那么现在计算机使用的补码呢?为什么在反码的基础上加1,还能得到正确的结果?2-1=2+=0000 0010原+1000 0001原=0000 0010补+1111 1111补如果把1111 1111当成原码,去除符号位,则:0111 1111原=127其实,在反码的基础上+1,只是相当于增加了膜的值:mod 128=127127 mod 128=1272-1 2+127 此时,表盘相当于每 128 个刻度转一轮.所以用补码表示的运算结果最小值和最大值应该是-128,128.但是由于 0 的特殊情况,没有办法表示 128,所以补码的取值范围是-128,127本人一直不善于数学,所以如果文中有不对的地方请大家多多包含,多多指点!.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com