原碼 反碼 補碼的產生 應用以及優缺點?

2021-08-29 18:23:28 字數 1290 閱讀 8696

數字在自然界中抽象出來的時候,一棵樹,兩頭牛,是沒有正數和負數的概念的

計算機儲存最原始的數字,也是沒有正和負的數字,叫沒符號數字

如果我們在記憶體分配4位(bit)去存放無符號數字,是下面這樣子的

為了表示正與負,人們發明了"原碼",把生活應該有的正負概念,原原本本的表示出來

把左邊第一位騰出位置,存放符號,正用0來表示,負用1來表示

使用「原碼」儲存的方式會存在一種弊端

我們希望 (+1)和(-1)相加是0,但計算機只能算出0001+1001=1010 (-2);

另外乙個問題,這裡有乙個(+0)和(-0)。

為了解決「正負相加等於0」的問題,在「原碼」的基礎上,人們發明了「反碼」

「反碼」表示方式是用來處理負數的,符號位置不變,其餘位置相反。

當「原碼」變成「反碼」時,完美的解決了「正負相加等於0」的問題。

過去的(+1)和(-1)相加,變成了0001+1101=1111,剛好反碼表示方式中,1111象徵-0。

但是還是會存在兩個零的問題(+0和-0)。

我們希望只有乙個0,所以發明了"補碼",同樣是針對"負數"做處理的

"補碼"的意思是,從原來"反碼"的基礎上,補充乙個新的**,(+1)

目的是為了消除(-0)

但是,在補一位1的時候,要丟掉最高位

我們要處理"反碼"中的"-0",當1111再補上乙個1之後,變成了10000,丟掉最高位就是0000,剛好和左邊正數的0,完美融合掉了

這樣就解決了+0和-0同時存在的問題。

另外"正負數相加等於0"的問題,同樣得到滿足

舉例,3和(-3)相加,0011 + 1101 =10000,丟掉最高位,就是0000(0)

同樣有失必有得,我們失去了(-0) , 收穫了(-8)

以上就是"補碼"的存在方式。

結論:儲存正負數,不斷改進方案後,選擇了最好的"補碼"方案

memset的使用以及原碼反碼補碼 md

正數的原碼 反碼 補碼 負數情況較為複雜 負數的補碼是在其原碼的基礎上,符號位不變,其餘各位取反,最後 1.即在反碼的基礎上 1 1 10000001 原 11111110 反 11111111 補 計算機必然不會去區分符號位,因此符號位是要參與計算的,如果使用原碼計算 1 1 1 1 000000...

詳解原碼 反碼以及補碼

很多人都只知道計算機使用的是二進位制,但很少有人了解計算機是以補碼的方式進行儲存資料的,之所以使用補碼而不是直接使用二進位制實際是為了解決正負運算的問題。5在二進位制中表示為101b b為二進位制單位 如果是在32位計算機中,我們高位補零 00000000 00000000 00000000 000...

原碼 補碼 反碼以及位運算

2 位運算 機器數是乙個數在計算機中的二進位制表示形式,機器數是帶符號的,在計算機中用乙個數的最高位 第一位 存放符號,正數為0,負數為1。例如1 帶符號即 1 在計算機中的最終表示形式為 0000 0001,依此類推 1的二進位制為 1000 0001。這種表示方式又叫做原碼,其中0的原碼為000...