關於二進位制的負數怎麼表示與移位運算

2021-08-18 00:15:39 字數 917 閱讀 1630

對於正數的二進位制,應該沒有疑問,比如(以8位系統來分析,第一位為符號位)1的二進位制表示為00000001。

而對於負數來說,就比較麻煩,比如-1。有人說是10000001,而有人說是11111111。

其實這兩種說法都沒錯,這是分類方法的差異。在一些把二進位制分為原碼、反碼、補碼的體系中(注:當然對於正數,三碼為1),10000001是-1的原碼,而11111111是-1的補碼。

因為在計算機內,-1是以11111111(也就是上文的補碼)的形式儲存在計算機,同時計算機也是以補碼的方式進行運算,所以有些人就不過原碼反碼補碼這種亂七八糟的東西,直接認為-1就是1111111。

因為為了滿足1-1=1+(-1)這個關係。

如果採用原碼,則1-1  != 1+(-1)= 00000001+10000001= 10000010=-2(原碼表示)。

而採用補碼 ,則1-1 = 1+(-1) = 00000001+11111111 = 0(因為第8位溢位,相當於被丟棄),完美解決問題,別的負數也是符合這種機制,故為了運算方便,就捨棄了邏輯性。

下面就來說一種我認為比較好的一種求負數的二進位制(這裡說的是補碼)的方法。

求乙個負數的補碼,我們只要用該負數的絕對值,取反加1就可以得到相應的負數。還是以-1為例,其絕對值是1,也就是二進位制的00000001,取反加1得11111111,也就是-1的補碼形式。

而怎樣從乙個二進位制數(補碼)推出它的十進位制數呢,(對於有符號數而言)首先看二進位制的最高位,如果是0,則該二進位制就是正數,這個很方便轉換。若是1,則說明該二進位制數是負數,但是補碼的非邏輯性則使人很難看出這個數到底是多少,我們可以對這個數取反加一,那我們就可以得到這個數的二進位制的絕對值,再由符號位就可以知道這個數的值了。

以11111111(補碼)為例,最高位為1,我們知道它是負數,取反加1後,我們得到00000001,則知道其的絕對值是1,那麼我們可以知道這個數就是-1。

負數的二進位制怎麼表示

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

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

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

負數的二進位制

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