十万个为什么——为什么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
待续