版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机中的原码、反码和补码大家都知道数据在计算机中都是按字节来储存了,1个字节等于8位(lByte=8bit),而计算机8只能识别0和1这两个数,所以根据排列,1个字节能代表256种不同的信(0和息,即1两种2可能,8位排列),比如定义一个字节大小的无符号整数 (unsigned char),那么它能表示的是0, 255(0、82-1)这些数,共是256个数, 因为,前面说了,一个字节只能表示256种不同的信息。别停下,还是一个字节的 无符号整数,我们来进一步剖析它,0是这些数中最小的一个,我们先假设它在讣 算机内部就用8位二进制表示为000(从理论上来00000说也可以表示成其他不同的 二进
2、制码,只要这256个数每个数对应的二进制码都不相同就可以了),再假设1 表示为00000001, 2表示为00000010, 3表示为00000011,依次类推,那么最大 的那个数255在8位一.进制中就表示为最大的数11111111,然后,我们把这些二 进制码换算成十进制看看,会发现刚好和我们假设的数是相同的,而事实上,在计 算机中,无符号的整数就是按这个原理来储存的,所以告诉你一个无符号的整数的 二进制码,你就可以知道这个数是多少,而且知道在计算机中,这个数本身就是以 这个二进制码来储存的。比如我给你一个2个字节大小的二进制码,首先声明它表 示的是无符号的整数:00000000 00000
3、010,我们把前面的0省略,换算一下,它表 示的也是数值2,和前面不同的是,它占了 2个字节的内存。不同的类型占的内存 空间不同,如在我的电脑中char是1个字节,int是4个字节,long是8个字节 (你的可能不同,这取决于不同的计算机设置),它们的不同之处仅仅是内存大的能 表示的不同的信息多些,也就是能表示的数范围更大些(u8*4nsigned int能表示的范围是0、2-1),至于怎么算,其实都是一样的,直 接把二进制与十进制相互转换,二进制就是它在计算机中的样子,十进制就是我们 所表示的数(误解:不同的计算机储存的原理是不同的,取决于商家的喜好呢)。无符号的整数根本就没有原码、反码和补
4、码。只有有符号的整数才有原码、反码和补码的其他的类型一概没有。虽然我们 也可以用二进制中最小的数去对应最小的负数,最大的也相对应,但是那样不科 学,下面来说说科学的方法。还是说一个字节的整数,不过这次是有符号的啦,1 个字节它不管怎么样还是只能表示256个数,因为有符号所以我们就把它表示成范 围:-128-127。它在计算机中是怎么储存的呢,可以这样理解,用最高位表示符号 位,如果是0表示正数,如果是1表示负数,剩下的7位用来储存数的绝对值的 话,能表示27个数的绝对值,再7考虑正负两种惜况,2*2还是256个数。首先定义0在计算机中储存为 00000000,对于正数我们依然可以像无符号数那样
5、换算,从00000001到01111111 依次表示1到127。那么这些数对应的二进制码就是这些数的原码。到这里很多人 就会想,那负数是不是从10000001到11111111依次表示-1到-127,那你发现没 有,如果这样的话那么一共就只有255个数了,因为10000000的情况没有考虑在 内。实际上,10000000在计算机中表示最小的负整数,就是这里的-128,而且实际上 并不是从10000001到11111111依次表示T到-127,而是刚好相反的,从 10000001到11111111依次表示-127至卜1。负整数在计算机中是以补码形式储存 的,补码是怎么样表示的呢,这里还要引入另一
6、个概念一一反码,所谓反码就是把 负数的原码(负数的原码和和它的绝对值所对应的原码相同,简单的说就是绝对值 相同的数原码相同)各个位按位取反,是1就换成0,是0就换成1,如-1的原码 是00000001,和1的原码相同,那么-1的反码就是11111110,而补码就是在反码 的基础上加1,即T的补码是11111110+1=11111111,因此我们可以算出-1在计算 机中是按11111111储存的。总结一下,计算机储存有符号的整数时,是用该整数 的补码进行储存的,0的原码、补码都是0,正数的原码、补码可以特殊理解为相 同,负数的补码是它的反码加1。下面再多举儿个例子,来帮助大家理解十进制?二进制(
7、怎么算,要是不知道看计算机基础的书去)47 ? 101111有符号的整数原码反码补码47 00101111 00101111 00101111(正数补码和原码、反码相同,不能从字面理 解),47 10101111 11010000 11010001(负数补码是在反码上加1,符号位不参与运 算)再举个例子,学C语言的同学应该做过这道题:把,1以无符号的类型输出,得什么结果,(程序如下)includevoid main()short int n=l;cout (unsigned short int)nENDL;首先在我的电脑中short int类型的储存空间是2个字节,你的可能不同,我 说过,这取
8、决于你的计8*216算机配置。它能储存2,65536个不同的数据信息,如果是无符号那么它的范围是065535(021515-1),如果是有符号,那么它的范围是-32768327672(-2-1) o这道题目 中,开始n是一个有符号的短整型变量,我们给它赋值为-1,根据我们前面所说 的,它在计算机中是以补码11111111 11111111储存的,注意前面说了是2个字 节。如果把它强制为无符号的短整型输岀的话,那么我们就把刚才的二进制把看成 无符号的整型在计算机中储存的形式,对待无符号的整型就没有什么原码、反码和 补码的概念了,直接把11111111 11111111转化成十进制就是65535,
9、其实我们一 看都是一就知道它是范围中最大的一个数了。呵呵,就这么简单。你个把上面的源 代码编译运行看看,如果你的电脑short int也是两个字节,那就会和我得一样的 结果。你可以先用这个语句看看:coutendl; 看看你的电脑里的短整型占多少 的储存空间,也可以用sizeof来看其它任何类型所分配的储存空间。最后提醒一句,关于数据如何在计算机中储存的,这里只适用于整型的数据, 对于浮点型的是另一种方式,这里我们暂时就不深究了。FeedBack:1(为什么使用补码形式:其实计算机中的数值用补码来表示,一是为了防止0有2个编码,其次就是为 了把减法运算用加法运算表示出来,以达到简化电路的作用。
10、具体内容请参看一些 专业书籍,比如华中科逻辑设计(呵技大出版的呵,我大二的课本)。为什么用补码表示有符号整数。比如8位整数表示的范围是-128、127,而不是 -127128呢,想过没有,为什么二进制10000000在原码和反码中表示0,在补码中 它不表示0,保证了 0表示的唯一性,但是它为什么表示负数,而不是整数,你也 许会说,因为它符号位是1呀,表示负数呀,对,继续,+128我们用补码怎么表 示,包括符号位,表示为010000000,超过了 2个字节,如果截取低8位,那么是 10000000,最高位(符号位)是1,表示的是一个负数,我们再看看-128的机器码是 多少,原码110000000
11、,反码101111111,补码110000000,截取低8位即10000000,表示的是一个负数。其实呀,这些总结出来的东西都是玩巧,也并不 是说非要这样实现,学了计算机逻辑原理,就知道,其实这样做是111于物理条件关 系。因为运算器里这样做更容易实现讣算。2(int x二-70;int y=2;int z=xyz的值是多少,主要是不明白负数移位该怎么算,在C语言中int是两个字节所以70在计算机中表示为0000 0000 0100 0110-70 用补码表示即 1111 1111 1011 1010右移2位C语言中采用的是算术右移所以补进位和原符号位相同即1111 1111 1110 111
12、0取反加一求它的相反数 0000 0000 0001 0010 等于 17所以右移后的结果是-17有个规则如果左移1位相当于乘以2右移1位相当于除以2取整 我们验证一 下用-70除以2*2结果取整正好是我们推算的-17在C+中int是四个字节但是 结果也是一样的原因自己可以推算一下3.在8位运算中65-15具体怎么通过补码 计算啊15的原码是0000 1111补码也是0000 1111因为是正数符号位(最高位)为0-15的原码是1000 1111(?注意这个地方你弄错了)符号为为1表示负反码就 是1111 0000(注意原码反码补码之间转换的时候千万不要把符号位考虑进去)补 码就是 1111 0001如果你已经求出了 15的补码这里有个简便的方法求-13的补码:直接把15的 补码包含符号位一起求反即可即15补码1111 0001那么-15的补码0000 1110补码计算的时候符号位是要直接参与二进制运算了而不是单独考虑所谓多余8位的进位舍去其实就是比如补码1111 1111再加任意非0数原来这个补码表示的数就会发生溢出(比如加上0000 0001原先符号位1表示负数加后表示正数)这 里也许你觉得没有必要因为本身只能容纳8位多余的当然要舍去可是你可能不知道如果是反码进行运算的话不是舍去多余进位而是把多余的进 位加到最低位称为循环进位4。补码溢出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安防行业的营销工作总结
- 建筑行业工人技能提升总结
- 战略合作方案计划
- 咨询服务员的服务态度分析
- 医疗行业医生工作总结
- 软件界面设计师工作心得
- 2024年度消防验收现场指导及代办服务合同样本3篇
- 2024年度创业板上市公司定向增发股票购买协议3篇
- 幼儿园薯条美食课程设计
- 我为集团做贡献主题演讲稿(6篇)
- 2025年上半年山西吕梁市柳林县招聘毕业生70人到村(社区)工作(第二批)重点基础提升(共500题)附带答案详解
- 湖北省荆州市荆州八县市区2023-2024学年高一上学期1月期末联考生物学试题
- 2024年非煤矿山年终安全生产工作总结
- 2024北京海淀初一(上)期末语文试卷及答案
- CMQOE质量组织卓越认证经理历年考试真题试题库(中文版)
- 公路工程施工组织设计(投标用)
- 一年级数学计算题专项练习1000题集锦
- 《预防性侵安全教育》主题班会教案
- 2024企业安全生产考试题库(600题含答案)
- 2024年高考物理模拟卷(山东卷专用)(考试版)
- 中建施工电梯安拆专项施工方案
评论
0/150
提交评论