1. 程式人生 > >十萬個為什麽——為什麽8bit有符號整型的範圍是-128到127

十萬個為什麽——為什麽8bit有符號整型的範圍是-128到127

道理 說了 mips pri 說我 疑惑 有符號 rim 寫到

從譚浩強的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哈哈~

十萬個為什麽——為什麽8bit有符號整型的範圍是-128到127