- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
原码、反码、补码
数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚.为了能方便的与二进制转换,就使用了十六进制和八进制.下面进入正题. 数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为 (-127~-0 +0~127)共256个. 有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits ,( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 =原 + 原 = 原 = ( -2 ) 显然不正确(十进制的1减1当然为0)。因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算: ( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= 反+ 反 = 反 = ( -0 ) 有问题. ( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = 反+ 反 = 反 = ( -1 ) 正确。问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大). 于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为: (-128~0~127)共256个. 注意-128没有相对应的原码和反码, (-128) = 补码的加减运算如下: ( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = 补 + 补 = 补 = ( 0 ) 正确 ( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = 补+ 补= 补 = ( -1 ) 正确 所以补码的设计目的是: ⑴使符号位能与有效值部分一起参加运算,从而简化运算规则. ⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。
数值型数据的表示及处理
计算机内部的数值型数据都是采用二进制形式来表示的。人们日常已习惯使用十进制,书写起来很方便,而用二进制书写起来位数长得多,读起来也不一目了然。但用二进制易于用物理器件实现,运算起来规则简单,所以任何数值型数据在计算机内都是用二进制表示的。计算机中的数值型数据分成整数和实数两种,下面分别介绍它们的二进制表示方法。
2.1.4.1整数(定点数)表示
定点数的含义是约定小数点在某一固定位置上,整数可用定点数表示,约定小数点的位置在数值的最右边。整数分两类:无符号整数和有符号整数。
(1) 无符号整数
无符号整数常用于表示地址等正整数,可以是8位、16位、32位或更多位数。8位的正整数的表示范围是0~255(28一1),16位的正整数的表示范围是0~65535(216一1),32位的正整数的表示范围是0~232一1。
(2)有符号整数
有符号整数使用一个二进制位作为符号位,一般符号位都放在所有数位的最左面一位(最高位),“0”代表正号“+”(正数),“1”代表负号“一”(负数),其余各位用来表示数值的大小。可以采用不同的方法表示有符号整数,一般有原码、反码和补码。为简化起见,以下假设只用一个字节来表示一个整数。–号表示符号。
(2)原码:将真值前面的正(负)号用代码0(1)表示且放在数值位前面,并且数值部分用二进制表示。
(3)反码:将原码的符号位不变,数值位按位取反。
(4)补码:在反码的末位加1。
在现代计算机中,算术运算都是以补码为基础,操作数是补码的形式表示,运算结果也是以补码形式表示或存储。
①原码表示
数值型数据的原码表示是将最高位作符号位,其余各位用数值本身的绝
文档评论(0)