首先,你要知道這幾個知識點:
8 位長度的二進位制,其中第一位表示符號,0 正 1 負。然後剩下的 7 位用來表示數。
計算機中使用“補碼”來儲存資料。
補碼的規則:正數的補碼就是這個數本身,負數的補碼用這個數的反碼 + 1 表示。
反碼的規則:正數的反碼就是這個數本身,負數的反碼就是除了符號位以外各位取反,也就是 1 變 0,0 變 1。
補碼求原碼的規則:對補碼再求一次補碼,就得到其原碼。
然後是二進位制轉十進位制的規則,就是從右往左,第 X 位的數乘以 2 的 (X - 1) 次方,然後把所有數加起來。比如一個二進位制數,其中 abcdefg 分別表示一位 0/1 數字。 那麼其轉成十進位制就 。
計算機中為什麼用補碼儲存資料?因為原碼和反碼都存在“0 有兩個表示方式,一個是 +0,一個是 -0”的問題。還有就是補碼可以更方便的進行運算,可以把減法變成加法來運算。
有了這些知識點,你再來理解這句話。
先說正數部分怎麼來的,因為正數的補碼就是原碼,所以就是我們常見的二進位制表示,當位數確定的時候,要使這個數最大,那麼它的每一位都一定是 1,比如四位二進位制數 最大,七位二進位制數 最大。(就像十進位制數,如果位數一定,那麼這個數最大的話,一定是各位都是 9,比如三位整數 最大,五位整數 最大)。
已經知道一共有 8 位的長度了,第一位表示符號,正數為 0,還剩下 7 位,最大的數就是 ,所以這個數是多少呢?如果你直接套上面那個公式的話,這個數就是 127(10)。
如果你真的直接套公式算了,那麼你肯定發現,這個數太難算了,有一個更簡單的演算法,就是先給這個數 +1,得到結果再 -1,這樣結果肯定不變。而二進位制是逢二進一,所以如果給 加上 1 的話,每一位都要向前進 1,得到 ,這樣再套上面的公式就簡單了,就是 。然後再減去 1,就是 。
再說負數的部分怎麼來的。負數的解釋就稍微麻煩一些,因為負數的補碼和我們平常見到的二進位制原碼不同,而計算機中又是拿補碼來儲存的。。。
首先還是 8 位二進位制數,最高位代表符號位,負數為 1。剩下 7 位,我們來找一下規律:
………………
我們發現,補碼和原碼正好反過來,一個減小另一個增大。
到最後,我們發現 轉成原碼的話,補碼 + 1 就會進位,而進位就會溢位,計算機中使用 8 個二進位制位來儲存資料,溢位了就沒了。這裡就規定這個數就是 -128,也就是 。
這句話中的 只能是用補碼的反碼錶示的。
首先,你要知道這幾個知識點:
8 位長度的二進位制,其中第一位表示符號,0 正 1 負。然後剩下的 7 位用來表示數。
計算機中使用“補碼”來儲存資料。
補碼的規則:正數的補碼就是這個數本身,負數的補碼用這個數的反碼 + 1 表示。
反碼的規則:正數的反碼就是這個數本身,負數的反碼就是除了符號位以外各位取反,也就是 1 變 0,0 變 1。
補碼求原碼的規則:對補碼再求一次補碼,就得到其原碼。
然後是二進位制轉十進位制的規則,就是從右往左,第 X 位的數乘以 2 的 (X - 1) 次方,然後把所有數加起來。比如一個二進位制數,其中 abcdefg 分別表示一位 0/1 數字。 那麼其轉成十進位制就 。
計算機中為什麼用補碼儲存資料?因為原碼和反碼都存在“0 有兩個表示方式,一個是 +0,一個是 -0”的問題。還有就是補碼可以更方便的進行運算,可以把減法變成加法來運算。
有了這些知識點,你再來理解這句話。
先說正數部分怎麼來的,因為正數的補碼就是原碼,所以就是我們常見的二進位制表示,當位數確定的時候,要使這個數最大,那麼它的每一位都一定是 1,比如四位二進位制數 最大,七位二進位制數 最大。(就像十進位制數,如果位數一定,那麼這個數最大的話,一定是各位都是 9,比如三位整數 最大,五位整數 最大)。
已經知道一共有 8 位的長度了,第一位表示符號,正數為 0,還剩下 7 位,最大的數就是 ,所以這個數是多少呢?如果你直接套上面那個公式的話,這個數就是 127(10)。
如果你真的直接套公式算了,那麼你肯定發現,這個數太難算了,有一個更簡單的演算法,就是先給這個數 +1,得到結果再 -1,這樣結果肯定不變。而二進位制是逢二進一,所以如果給 加上 1 的話,每一位都要向前進 1,得到 ,這樣再套上面的公式就簡單了,就是 。然後再減去 1,就是 。
再說負數的部分怎麼來的。負數的解釋就稍微麻煩一些,因為負數的補碼和我們平常見到的二進位制原碼不同,而計算機中又是拿補碼來儲存的。。。
首先還是 8 位二進位制數,最高位代表符號位,負數為 1。剩下 7 位,我們來找一下規律:
………………
我們發現,補碼和原碼正好反過來,一個減小另一個增大。
到最後,我們發現 轉成原碼的話,補碼 + 1 就會進位,而進位就會溢位,計算機中使用 8 個二進位制位來儲存資料,溢位了就沒了。這裡就規定這個數就是 -128,也就是 。
這句話中的 只能是用補碼的反碼錶示的。
世界上其實有 11 種人,我是那第 11 種人。。。。。。XD