发表于: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位原码能表示的数多一个