电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOC文档下载
分享到微信 分享到微博 分享到QQ空间

为什么short整型(16位)的范围是-32768到32767?汇总

  • 资源ID:458532713       资源大小:48.50KB        全文页数:11页
  • 资源格式: DOC        下载积分:15金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要15金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

为什么short整型(16位)的范围是-32768到32767?汇总

为什么short整型(16位)的范围是-32768到32767 ?计算机为什么要用反码存储整型这得从二进制的原码说起:如果以最高位为符号位,二进制原码最大为011111111111111仁2的15次方减 仁32767最小为 1111111111111111=-2的 15 次方减 1= -32767此时 0有两种表示方法,即正 0和负 0: 0000000000000000=1000000000000000=0所以,二进制原码表示时,范围是 -32767-0和032767,因为有两个零的存在,所以不同的数值个数一共只有 2的16次方减1个,比16位二进制能够提供的2的16次方个编码少1 个。但是计算机中采用二进制补码存储数据,即正数编码不变,从0000000000000000 到0111111111111111依旧表示0到32767,而负数需要把除符号位以后的部分取反加1,即-32767 的补码为 1000000000000001。到此,再来看原码的正 0和负0 : 0000000000000000 和1000000000000000,补码表示中,前者的补码还是0000000000000000,后者经过非符号位取反加 1后,同样变成了0000000000000000,也就是正0和负0在补码系统中的编码是一样的。但是,我们知道,16位二进制数可以表示2的16次方个编码,而在补码中零的编码只有一个,也就是补码中会比原码多一个编码出来,这个编码就是1000000000000000,因为任何一个原码都不可能在转成补码时变成 1000000000000000 。所以,人为规定1000000000000000这个补码编 码为-32768。所以,补码系统中,范围是 -2376832767 。因此,实际上,二进制的最小数确实是1111111111111111,只是二进制补码的最小值才是 1000000000000000,而补码的 1111111111111111是二进制值的-1。补码原码、反码、补码数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生 活中人们使用的是十进制,”正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自 << 数学发展史 >> 有空大家可以看看哦,很有意思的)为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负)这就是机器数的原码了.假设机器能处理的位数为 8即字长为Ibyte,原码能表示数值的范围为(-127-0 +0127)共 256 个.有了数值的表示方法就可以对数进行算术运算但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下:假设字长为8bits(1 )10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10(00000001)原 + (10000001) 原=(10000010) 原=(-2 ) 显然不正确.因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上对除符号位外的其余各位逐位取反就产生了反码反码的取值空间和原码相同且一一对应F面是反码的减法运算(1 )10 - ( 1 ) 10= ( 1 )10+ ( -1 ) 10= ( 0 )10(00000001)反 + (11111110)反=(11111111)反=(-0 )有问题(1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10(00000001)反 + (11111101)反=(11111110)反=(-1 )正确问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大)于是就引入了补码概念负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一 样的在补码中用(-128)代替了 (-0),所以补码的表示范围为:(-1280127) 共 256 个注意:(-128)没有相对应的原码和反码 ,(-128) = (10000000)补码的加减运算如下(1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = ( 0 )10(00000001)补 + (11111111) 补=(00000000)补=(0 )正确(1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10(00000001) 补 + (11111110)补=(11111111)补=(-1 )正确所以补码的设计目的是使符号位能与有效值部分一起参加运算,从而简化运算规则使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。看了上面这些大家应该对原码、反码、补码有了新的认识了吧!有网友对此做了进一步的总结:本人大致总结一下:1、在计算机系统中,数值一律用补码来表示(存储)。主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。2、补码与原码的转换过程几乎是相同的。数值的补码表示也分两种情况:(1)正数的补码:与原码相同。例如,+9的补码是00001001 。(2 )负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加 1。例如,-7的补码:因为是负数,则符号位为“11000整个为;其余7位为-7的绝对值+7的原码0000111按位取反为1111000 ;再加1,所以-7的补码是11111001 。已知一个数的补码,求原码的操作分两种情况:(1 )如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。(2 )如果补码的符号位为“1 ”,表示是一个负数,求原码的操作可以是:符号位为,其余各位取反,然后再整个数加 1。例如,已知一个补码为 11111001 ,则原码是10000111 (-7):因为符号位为“1 ”,表示是一个负数,所以该位不变,仍为“7位11其余01取反后为0000110 ;再加1,所以是 10000111 。在“闲扯原码、反码、补码”文件中,没有提到一个很重要的概念“模”。我在这里稍微介绍一下“模”的概念:“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有 一个计量范围,即都存在一个“模"。例如:时钟的计量范围是 011,模=12。表示n位的计算机计量范围是 02(n)-1,模=2 (n)。【注:n表示指数】计量器上只“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,能表示出模的余数。任何有模的计量器,均可化减法为加法运算。例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6另一种是顺拨8小时:10+8=12+6=6在以12模的系统中,加8和减4效果是一样的,因此凡是减 4运算,都可以用加8来代替。对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6 和6都有这个特性。共同的特点是两者相加等于模。对于计算机,其概念和方法完全一样。n位计算机,设n=8,所能表示的最大数是11111111 , 若再加1称为100000000(9位),但因只有8位,最高位1自然丢失。又回了 00000000,所以 8位二进制系统的模为2(8)。在这样的系统中减法问题也可以化成加法问题,只需把减数用 相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。/关于算术运算的溢出问题,曾经我也迷茫过,而且不知道为什么整型变量溢出后会是模运算的结果呢,以前还以为是不可以预测的,不过弄懂了原码、补码的概念后,就发现其实都是有规律可循的,如果你还不太清楚补码什么东西,建议先看看随笔计算机中的原码、反码和补码,弄清楚整型数据在计算机中是如何储存的。在那篇文中,我们讲述了为什么我们把 -1强制成无符号短整型输出后会得到65535,在这里我们不对它进行类型转换,我们只是超出它的范围看看。还是定义一个2字节大小的短整型 short short n;,学了前面的知识,我们知道这里n的范围是-3276832767 ,而且通过前面知识我们也知道:这里的-32768在计算机中特殊表示为 10000000 00000000032767 是 00000000 0000000001111111 11111111-1-32767 是 11111111 1111111110000000 00000001当我们赋值n=32767,我们先n+1,超出它的范围,再输出n看看,结果是-32768,为什么?我们来分析一下,32767在内存中是以01111111 11111111储存的,我们对这个二进制码加1运算看看,结果是10000000 00000000,它表示的数是多少,哈哈,这不就是-32768吗?不甘心,也许是巧合呢,那我们再加1看看,结果是10000000 00000001, 表示的是-32767,再多试几个也一样的。哦,原来不是巧合呀,正因为如此,所以我们就 不用这么繁琐了,直接进行模运算就可以了!啊?什么是模运算?昏模运算就是除整取 余的运算。下面我把书上的例子再拿出来给你讲你就明白了。在16位机器上进行下面的操作:/为什么强调16位机器?因为16位机器上的short型的存储空间是2个字节short weight=42896;如果你把输出,在16位机器中将不能得到42896,而是-22640。因为有符号整数的表示范围是-3276832767 (共65536个数),所以它只能得到 42896的补码-22640(42896-65536=-22640)。一个整型类型的变量,用任何一个超过表示范围的整数初始化,得到的值为用该整数范围作模运算后的值。例如:short weight=142896;则当weight是2字节整型数时,得到值为11824。因为142896

注意事项

本文(为什么short整型(16位)的范围是-32768到32767?汇总)为本站会员(枫**)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.