求大神指导,为什么16位补码所表示的范围为-32768至32767,而不是我所推的-32767至32767?我的推导如下

如题所述

因为补码不是这么来的,如果按你这样计算,00000000代表0,那么10000000代表什么呢,百度不让发网址,你要真想清楚点,加2280688068,给你发个网址看下我写的,反正就是说,补码的并不是简单的像你这样计算,因为当初程序员就是打算用你这种方法来编码的,清晰又明了,多好啊,可是会出现错误,没办法,后来就有了补码,当然你也可以追问
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-29
位数太多,不便说明基本概念。

楼主用 4 位数,推导一下,应该是 -8~+7。

补码,是有严格的定义式的,参考:

http://zhidao.baidu.com/question/513374479.html
http://zhidao.baidu.com/question/294870512.html追问

-8~+7如何推导呢?

追答

补码定义式:
[X]补 = X ; 0 <= X < 2^(n-1)
[X]补 = 2^n - |X| ; - 2^(n-1) <= X < 0

n = 4 时,变成:
[X]补 = X ; 0 <= X < 8   ,即 0~+7;
[X]补 = 16 - |X| ; - 8 <= X < 0  ,即 -8~-1。

综合,就是:-8~+7。
---------------------
看楼主的插图,你所求出的范围,是原码的表达范围。

相似回答