十萬個為什么——為什么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

待續


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM