首页 计算机中的原码、反码、补码

计算机中的原码、反码、补码

举报
开通vip

计算机中的原码、反码、补码计算机中的原码、反码、补码 大家都知道数据在计算机中都是按字节来储存了,1个字节等于8位(1Byte=8bit),而计算机只能识别0和1这两个数,所以根据排列,1个字节能代表256种不同的信息,即28(0和1两种可能,8位排列),比如定义一个字大小的无符号整数(unsigned char),那么它能表示的是0~255(0~28-1)这些数,一共是256个数,因为,前面说了,一个字节只能表示256种不同的信息。 别停下,还是一个字节的无符号整数,我们来进一步剖析它,0是这些数中最小的一个,我们先假设它在计算机内部...

计算机中的原码、反码、补码
计算机中的原码、反码、补码 大家都知道数据在计算机中都是按字节来储存了,1个字节等于8位(1Byte=8bit),而计算机只能识别0和1这两个数,所以根据排列,1个字节能代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 256种不同的信息,即28(0和1两种可能,8位排列),比如定义一个字大小的无符号整数(unsigned char),那么它能表示的是0~255(0~28-1)这些数,一共是256个数,因为,前面说了,一个字节只能表示256种不同的信息。 别停下,还是一个字节的无符号整数,我们来进一步剖析它,0是这些数中最小的一个,我们先假设它在计算机内部就用8位二进制表示为00000000(从理论上来说也可以表示成其他不同的二进制码,只要这256个数每个数对应的二进制码都不相同就可以了),再假设1表示为00000001,2表示为00000010,3表示为00000011,依次类推,那么最大的那个数255在8位二进制中就表示为最大的数11111111,然后,我们把这些二进制码换算成十进制看看,会发现刚好和我们假设的数是相同的,而事实上,在计算机中,无符号的整数就是按这个原理来储存的,所以告诉你一个无符号的整数的二进制码,你就可以知道这个数是多少,而且知道在计算机中,这个数本身就是以这个二进制码来储存的。比如我给你一个2个字节大小的二进制码,首先声明它表示的是无符号的整数:00000000 00000010,我们把前面的0省略,换算一下,它表示的也是数值2,和前面不同的是,它占了2个字节的内存。不同的类型占的内存空间不同,如在我的电脑中char是1个字节,int是4个字节,long是4个字节(你的可能不同,这取决于不同的计算机设置),它们的不同之处仅仅是内存大的能表示的不同信息多些,也就是能表示的数范围更大些(unsigned int能表示的范围是0~28*4-1),至于怎么算,其实都是一样的,直接把二进制与十进制相互转换,二进制就是它在计算机中的样子,十进制就是我们所表示的数(误解:不同的计算 储存的原理是不同的,取决于商家的 喜好呢)。无符号的整数根本就没有原码、反码和补码。 只有有符号的整数才有原码、反码和补码的~其他的类型一概没有。虽然我们也可以用二进制中最小的数去对应最小的负数,最大的也相对应,但是那样不科学,下面来说说科学的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 。还是说一个字节的整数,不过这次是有符号的啦,1个字节它不管怎么样还是只能表示256个数,因为有符号所以我们 128-127。它在计算机中是怎么储存的呢?可以这样理解,就把它表示成范围:- 用最高位表示符号位,如果是0表示正数,如果是1表示负数,剩下的7位用来储存数的绝对值的话,能表示27个数的绝对值,再考虑正负两种情况,27*2还是256个数。首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。到这里很多人就会想,那负数是不是从10000001到11111111依次表示-1到-127,那你发现没有,如果这样的话那么一共就只有255个数了,因为10000000的情况没有考虑在内。实际上, 128,而且实际上并不是10000000在计算机中表示最小的负整数,就是这里的- 从10000001到11111111依次表示-1到-127,而是刚好相反的,从10000001到11111111依次表示-127到-1。负整数在计算机中是以补码形式储存的,补码是怎么样表示的呢,这里还要引入另一个概念--反码,所谓反码就是把负数的原码除符号位外各个位按位取反,是1就换成0,是0就换成1,如-1的原码是10000001,那么-1的反码就是11111110,而补码就是在反码的基础上加1,即-1的补码是11111110+1=11111111,因此我们可以算出-1在计算机中是按11111111储存的。总结一下,计算机储存有符号的整数时,是用该整数的补码进行储存的,正数的原码、补码可以特殊理解为相同,负数的补码是它的反码加1。下面再多举几个例子,来帮助大家理解~ 十进制?二进制(怎么算?要是不知道看计算机基础的书去) 47?101111 有符号的整数原码反码补码 47 00101111 00101111 00101111(正数补码和原码、反码相同,不能从字面理解) -47 10101111 11010000 11010001(负数补码是在反码上加1,符号位不参与运算) 再举个例子,学C语言的同学应该做过这道题: 把-1以无符号的类型输出,得什么结果?(程序如下) #include void main() { short int n=-1; cout(unsigned short int)n ENDL; } 首先在我的电脑中short int类型的储存空间是2个字节,你的可能不同,我说过,这取决于你的计算机配置。它能储存28*2=65536个不同的数据信息,如果是无符号那么它的范围是0~65535(0~216-1),如果是有符号,那么它的范围是-32768~32767(-215~215-1)。这道题目中,开始n是一个有符号的短整型变量,我们给它赋值为-1,根据我们前面所说的,它在计算机中是以补码11111111 11111111储存的,注意前面说了是2个字节。如果把它强制为无符号的短整型输出的话,那么我们就把刚才的二进制把看成无符号的整型在计算机中储存的形式,对待无符号的整型就没有什么原码、反码和补码的概念了,直接把11111111 11111111转化成十进制就是65535,其实我们一看都是一就知道它是范围中最大的一个数了。呵呵,就这么简单。你个把上面的源代码编译运行看看,如果你的电脑short int也是两个字节,那就会和我得一样的结果。你可以先用这个语句看看:cout endl;看看你的电脑里的短整型占多少的储存空间,也可以用sizeof来看其它任何类型所分配的储存空间。 最后提醒一句,关于数据如何在计算机中储存的,这里只适用于整型的数据,对于浮点型的是另一种方式,这里我们暂时就不深究了。 FeedBack: 1.为什么使用补码形式: 一、是为了防止0有2个编码; 二、是为了把减法运算(因为减法运算比较复杂,涉及到到借1当2的原则)用加法运算表示出来,以达到简化电路的作用。 例如:在8位运算中65-15 如果采用减法 65=0100 0001 (减)0011 1111(借1当2) 15=0000 1111 50=0011 0010(结果) 如果采用加法 65=0100 0001 (加) -15=1111 0001 50=0011 0010(结果)(超出位舍) 具体 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 请参看一些专业书籍,比如华中科技大出版的《逻辑设计》(呵呵,我大二的课本)。 为什么用补码表示有符号整数。比如8位整数表示的范围是-128~127,而不是-127~128呢?想过没有,为什么二进制10000000在原码和反码中表示0,在补码中它不表示0,保证了0表示的唯一性,但是它为什么表示负数,而不是正数,你也许会说,因为它符号位是1呀,表示负数呀,对,继续,+128我 超过了1个字节,如果们用补码怎么表示,包括符号位,表示为010000000, 截取低8位,那么是10000000,最高位(符号位)是1,表示的是一个负数,我们再看看-128的机器码是多少,原码110000000,反码101111111,补码110000000,截取低8位即10000000,表示的是一个负数。 其实学了计算机逻辑原理,就知道,其实这样做是由于物理条件关系。因为运算器里这样做更容易实现计算。 2. short x=-70; short y=2; short z=x y; z的值是多少?主要是不明白负数移位该怎么算? 在C语言中short是两个字节所以-70在计算机中表示即(补码)1111 1111 1011 1010 右移2位C语言中采用的是算术右移 所以补进位和原符号位相同即1111 1111 1110 1110 取反加1求它的源码1000 0000 0001 0010等于-18 所以右移后的结果是-18 有个规则如果左移1位相当于乘以2右移1位相当于除以2取整 我们验证一下用-70除以2*2结果取整是-17,说明此时这个规则对负数不 成立 3.在8位运算中65-15具体怎么通过补码计算啊 15的原码是0000 1111补码也是0000 1111 因为是正数符号位(最高位)为0 -15的原码是1000 1111,反码就是1111 0000(注意原码反码补码之间转 换的时候千万不要把符号位考虑进去)补码就是1111 0001 如果你已经求出了15的补码这里有个简便的方法求-15的补码: 直接把15的补码包含符号位一起求反再加1即可即 15补码0000 1111那么-15的补码1111 0001 补码计算的时候符号位是要直接参与二进制运算了而不是单独考虑 所谓多余8位的进位舍去其实就是比如补码1111 1111再加任意非0数原来这个补码表示的数就会发生溢出(比如加上0000 0001原先符号位1表示负数加后表示正数) 这里也许你觉得没有必要因为本身只能容纳8位多余的当然要舍去 可是你可能不知道如果是反码进行运算的话不是舍去多余进位而是把多余的进位加到最低位称为循环进位 4。补码溢出如何处理 这就要看你处理数据的范围,比如我用8位二进制记录数据。 只能储存-128~127之间的数据,如果超过127或小于-128就会溢出。 比如127+1=-128就是这个道理 就好象最大值和最小值连成了一个环,超过了循环计算 这样做才使得数据有规律性和周期性 为了实现这个所以补码是舍掉进位而反码是循环进位前面说过了 解决的办法就是如果8位的数据不过你就用16位的 如果整型不够就用长整型撒实在不行就用浮点型的 MSN空间完美搬家到新浪博客~
本文档为【计算机中的原码、反码、补码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_769254
暂无简介~
格式:doc
大小:20KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-12-19
浏览量:17