int 形的整数的取值范围为什么是-32768-32767而不是-32767-32767

请讲解详细点,谢谢!... 请讲解详细点,谢谢! 展开
 我来答
真冰刀雪剑
推荐于2017-09-22 · TA获得超过679个赞
知道小有建树答主
回答量:206
采纳率:0%
帮助的人:144万
展开全部
对于有符号的整数,用补码表示的话,比如说8位(即char,BYTE类型的),最高位是符号位,下面7位用来表示数据.
那么,表示正数的话,表示的范围为00000001-01111111,也就是说,8位表示正数,最高只能是127,最高是符号位嘛,是不能用的.
表示0:00000000
下面表示负数,相信你应该知道表示的方法,即补码是原码取反加1,听起来有点复杂,算起来更不简单,其实是这样的:CPU的加减法运算,其实是循环进行加减的,即当其由00000000加到11111111时,如果再加1,就又会为00000000了,只不过溢出寄存器会置位的.而当其由00000001减1,即为00000000,如果再减1,就会为11111111,这是什么?不就是-1吗?其实就是说:以十进制数来说,1-1=0,0-1=-1,这是显然的,再减?那就减吧.那么,从00000000可以减到什么时候呢?当然是不能与正数的补码重合就行了,所以可以从11111111-10000000,即从-1到-128.
所以,整个范围是-128~127.16位的,32位的,同理
劳伤痕
2011-03-07 · TA获得超过793个赞
知道小有建树答主
回答量:364
采纳率:0%
帮助的人:445万
展开全部
int数据占用2个字节,范围0xFFFF-OX0000,一下表示的是计算机补码
计算机数据是用补码存取的,ox7fff表示最大的正数为:2^15-1=3267
0的补码为0x0000,从这里可以发现还有一个数的表示:0x8000,
计算机是这么存储的:10***0(15个0),你会认为是-0(原码的表示法是对的),可是补码表示却是-128,那么和你来分析一下,补码存储后,显示出来会经过计算机的处理,处理步骤如下:
0x8000首先求反为》0xffff,
在经过自加一为》0x8000,这样,你一定以为是0了,注意这里的符号位不变,进位后存储在特殊功能寄存器的进位标志位(你会汇编语言就能理解的,比如单片机学习就理解了)
我的回答是,你错了,如果你理解汇编语言,就会知道,cpu的特殊寄存器中有进位标志位,那个位为1,所以补码0x8000表示的数正是-2^15=-32768
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-07
展开全部
0xFFFF是最大十六位数 ,由于最高为符号所以最大的正数为0x7FFF,最高位为0,0x7FFF = 32767。 如果为负数,则最高位为1,对应的最小负数0x8000,去掉最高符号位,变成0x0,取反得到0xFFFF,0xFFFF = 32768,所以为-32768 负数是以补码存放的,所以有一个取反的过程 。

参考资料: http://www.iterc.com

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式