十万个为什么——为什么8bit有符号整型的范围是-128到127

从谭浩强的C语言到我现在手上的这本C++ Primer Plus,几乎所有的书都是这么说的。说来惭愧,我从来没有研究过为什么是这个范围,以前每次看到这里就头疼,甚至知道考试要考也不背。

之前我也研究过,但是今天看到这里,又疑惑了。

所以,我还是没弄清楚!

先说说我的想法:

0 0 0 0 0 0 0 0

如果最前面一位用0和1来表示正负,那么剩下来的7位能表示的数,最小是0, 最大是2的七次方减一,即127。

所以, 在我的想象中,8位有符号整型的范围应该是 -127到-0,+0到+127, 其中-0和+0合并,所以范围就是 -127到127。

写到这里的时候, 我已经恍惚感觉到,可能和大一的计算机基础课“补码反码”的内容有关。

但是,我还是先百度了一下:

扫了一眼搜索结果,我首先点进了喜闻乐见的百度贴吧,发帖者显然和我有一样的困惑。

第一个回帖:

C语言吧1级贴吧大神通过数数成功让楼主懂了。这个回答显然不能让我信服。

 

第二个回帖:

 

依然在数数呀,0是正的吗?并不是:

 

最后一个回帖:

 

这位老哥毕竟是C语言吧真·13级大神,上来就指出大部分人在这个问题上错了。让我不由的精神一震。虽然他说了很多很专业的名词,x86,ARM,MIPS等等,还贴出网址,引经据典。但是我还是觉得少了点意思,不过总算给了我一点思路。

 

那么,到底是为什么呢?

我带着深深的疑惑和一丝丝感觉,点开了当时搜索出来的第一条——百度知道。

提问是:

回答是:

看到这里我就懂了,原来负整数是用补码来表示的。

我脑海中的 1 0 0 0 0 0 0 0 到 1 1 1 1 1 1 1 1 其实偷偷变成了 1 1 1 1 1 1 1 1 到 1 0 0 0 0 0 0 1 。

也许,我的理解还是有问题,不过算是暂时给我自己一个交代了哈哈。

 

经过这次探索,我明白了两个道理:

1、百度知道往往比百度贴吧靠谱得多(让我想起了十年前在百度知道问作业的时光)

2、我确实该承认我是一个没有计算机素养的切图仔,O(∩_∩)O哈哈~

 

《=========================两个小时之后的更新=====================》 

写完上面那些,我思考到现在。感觉最后那个百度知道的答案也有问题,说得也不清楚,是我想当然了!

这位老哥的算法可能是对的https://blog.csdn.net/bat67/article/details/75194627

待续

posted @ 2018-07-13 23:33  YuX1995  阅读(2038)  评论(0编辑  收藏  举报