16位数据寄存器存储范围为何是-32768~32767? 点击:1584 | 回复:0



gmx_1234

    
  • 精华:61帖
  • 求助:0帖
  • 帖子:663帖 | 15回
  • 年度积分:0
  • 历史总积分:13653
  • 注册:2006年5月31日
发表于:2010-07-18 14:18:42
楼主
网友:书上说16位数据寄存器的最高为符号位,0为正数1为负数,正数的最大值为32767,负数的最大值为-32768,这我就不明白了,除了符号位外,其他15位都为1时,加起来是32767,为什么负数能储存最高数是-32768呢?

A:

正数原码与反码、补码一致;
负数反码是将其原码除符号位之外的各位求反,补码是将反码加1。


为什么要讲补码呢?因为:在计算机系统中,数值一律用补码来表示(存储)。
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
----------------------------------------------------------------------------------------------
以下转载,解释有符号的数范围为何是-(n+1)~n:
为什么要设立补码呢?

第一是为了能让计算机执行减法:
【a-b】补=a补+(-b)补

第二个原因是为了统一正0和负0
正零:00000000
负零:10000000
这两个数其实都是0,但他们的原码却有不同的表示。
但是他们的补码是一样的,都是00000000
特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)
【10000000】补
=【10000000】反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符号位变成了0)

有人会问
10000000这个补码表示的哪个数的补码呢?
其实这是一个规定,这个数表示的是-128
所以n位补码能表示的范围是
-2^(n-1)到2^(n-1)-1
比n位原码能表示的数多一个


热门招聘
相关主题

官方公众号

智造工程师