第三講,我們來談談 「二進位制的負數」

2021-06-26 16:49:41 字數 2813 閱讀 2619

首先,你要記住並且不要問為什麼:「在計算機中,所有的資料,最終都是使用二進位制數表達的。

還要記住並且不要問為什麼:「在計算機中,正數是直接用原碼來表示和儲存的。

要記住並且不要問為什麼:「在計算機中,負數是以它的補碼(即它的反碼+1)來表示和儲存的。

對於允許是負數的數值(稱為帶符號的數值),必須先確定乙個固定的長度(換言之,就是二進位制數的位數),再把最左邊的最高位設定為符號位。必須固定位數,這樣才能避免符號位與其他位的混淆。

只要知道每個數值的位數,就可以找到符號位,它應是最左邊的那一位。如果符號位是0,該數值就是正的;如果它是1,該數值就是負的。

⑴原碼表示法規定:套用十進位制的思路,用最左邊的最高位來表示該數的符號位(0表示正數,1表示負數),剩餘的其他位數用來表示該數的絕對值。(關鍵:理解符號位其他位數

原碼:乙個整數,按照其絕對值大小轉換成二進位制數,並在最左邊的最高位用0或1來表示其正負,稱為原碼。

例①:正數 5 的原碼是:0000 0101。

而負數 -5 的原碼是:1000 0101。

反碼:將原碼,除符號位外的其他位數每一位按位取反,所得到的新的二進位制數,稱為反碼。(口訣:符號位不變其他位取反

⑵反碼表示法規定:零、正數的反碼與原碼相同,負數的反碼為對該數的原碼除符號位外每一位取反。

例②:正數 5 的反碼與原碼相同:0000 0101。

而負數 -5 的原碼是:1000 0101,對該數的原碼除符號位外每一位取反,得到反碼:1111 1010。

補碼:反碼加1,稱為補碼。(口訣:符號位不變其他位先取反再加1

⑶補碼表示法規定:零、正數的補碼與原碼相同,負數的補碼為對該數的原碼除符號位外每一位取反,然後在最後一位加1。

例③:正數 5 的補碼與原碼相同:0000 0101。

而負數 -5 的原碼是:1000 0101,對該數的原碼除符號位外每一位取反,然後在最後一位加1,得到補碼:1111 1011。

所以,在計算機中,負數 -5 是以它的補碼(即它的反碼+1):1111 1011 來表示和儲存的。

⑷不管是正數還是負數,其反碼或補碼的最高位,都是和原碼的最高位一樣!(請看原碼表示法的規定,還有反碼表示法和補碼表示法的規定!)

因為,正數的反碼或補碼,都是與原碼相同,所以最高位是不變的。

因為,負數的反碼或補碼,都是在原碼的基礎上,保持最高位不變,其他位數每一位取反,甚至在最後一位加1。

以上都是教我們,把我們熟悉的十進位制的正數或負數,轉化成計算機熟悉的二進位制的數:

(十進位制:原碼->符號位不變,先取反->反碼->再加1->補碼)

那反過來,看到計算機熟悉的二進位制的正數或負數,如何轉換成我們熟悉的十進位制的數?

(補碼->先減1->反碼->符號位不變,再取反->原碼:十進位制)

首先,要知道該二進位制數的最高位:如果最左邊的最高位(即符號位)為0則是正數,為1則是負數。

二進位制的正數,要轉換成十進位制,請先將其寫成「加權係數展開式」,然後用「按位權相加」法,即可轉換成十進位制。

二進位制的負數,要轉換成十進位制,首先要理解上面的「在計算機中,負數是以它的補碼(即它的反碼+1)來表示和儲存的」這句話的精髓,然後反過來逆推(符號位不變其他位先減1再取反):

例⑤:十進位制的 -10 在原碼表示法裡,其原碼是:1000 1010;對該數的原碼除符號位外每一位取反,得到反碼:1111 0101,然後在最後一位加1,得補碼:1111 0110。

反過來逆推,二進位制的 1111 0110(可理解為已知補碼),先減1,得出(反碼):1111 0101;除符號位外每一位取反,得出(原碼):1000 1010;它在原碼表示法裡,最高位1表示負數,剩餘的其他位數表示該數的絕對值,得:-10。

再看看逆推過程:

1111 0110

先     -1

---------

1111 0101

再取反:

---------

1000 1010 = 在原碼表示法裡,最高位1表示負數,剩餘的其他位數表示該數的絕對值,得:-10。

(這是按照補碼的原理來逆推原碼。相當於只有0點和6點的鐘,原來在0點,逆時針撥可到6點)

試試對該二進位制數求補碼:

1111 0110

先取反:

---------

1000 1001

再     +1

---------

1000 1010 = 用原碼表示法來理解,也是十進位制中的 -10。

(原碼取反加1得補碼,補碼取反加1也得出原碼。這是抖機靈。相當於只有0點和6點的鐘,原來在0點,順時針撥也可到6點)

⑸如果已知補碼求原碼,可將補碼過程逆推(即符號位不變,其他位先減1再取反)即得到原碼,亦可將該補碼再求補碼(即符號位不變,其他位先取反再加1)也能得到原碼。

其實,看到某個二進位制數,你可以理解為已經知道補碼,只需用上面定律⑸求出原碼,最後將原碼轉換成十進位制,不就行了?

⑹乙個二進位制數,如果每位取反(最高位符號位也取反,所以不是反碼),取反得到的值和原來的值,相加等於-1。(不是0,也不是1)

所以,求某個二進位制數取反的值,可用:-1-(該二進位制數的值),即該二進位制數的值的相反數減1。

負數的二進位制

先舉個正確的例子 7的二進位制形式可以表示如下 00000000 00000000 00000000 00000111 7的二進位制形式可以表示如下 11111111 11111111 11111111 111110011 左邊為高位,右邊為低位 2 最高位為符號位,正數的符號位為0,負數的符號位為...

負數的二進位制怎麼表示

假設有乙個 int 型別的數,值為5,那麼,我們知道它在計算機中表示為 00000000 00000000 00000000 00000101 5轉換成二制是101,不過int型別的數占用4位元組 32位 所以前面填了一堆0。現在想知道,5在計算機中如何表示?在計算機中,負數以其正值的補碼形式表達。...

負數在二進位制的表示方法

首先說明,看二進位制數左數第一位 即最高位 來判斷正負 用0表示非負數,用1表示負數。具體還要考慮資料型別,下面有詳細介紹 1 負數通常不用原碼表示,而是用補碼來表示原碼,負數原碼的補碼是原碼的符號位不變,其餘位按位取反再加1所得 2 對01碼的解讀需要考慮具體資料型別。比如 常數 5,在計算機裡資...