從譚浩強的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
待續