3个回答
展开全部
对于有符号的整数,用补码表示的话,比如说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位的,同理
那么,表示正数的话,表示的范围为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位的,同理
展开全部
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
计算机数据是用补码存取的,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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询