原碼反碼
補碼如果你和我一樣,有些忘記這三個名詞分別是什麼意思了,也不必急著新建乙個瀏覽器視窗去查它們的意思。因為,這篇文章就是圍繞著這三個名詞來的。
首先,負數在計算機中以補碼的形式儲存。我覺得這有必要說在前面。
1個位元組只能表示258個數,乙個位元組可以表示的有符號數的範圍就是-128-127。
作為有符號數,我們用乙個位元組的最高位作為符號位。並且我們規定,正數的符號位為0,負數的符號位為1。
剩下的7位可以表示2^7個數,算上正負兩種情況,正好是258個數。
0在計算機中儲存為0000 0000,這似乎不難理解。
正如你所想,我們可以按照無符號數的表示方法來表示有符號數正數。那麼,1-127我們可以依次表示為0000 0001 - 0111 1111. 沒錯,這很合理。
如果你在想是否可以用1000 0001 - 1111 1111依次表示-1到-127. 但是,如果這樣的話,我們稍加觀察就會發現,1000 0000似乎被我們遺忘了,導致現在乙個位元組只表示了255個數。
實際上,1000 0000表示最小的負數,就是這裡的-128. 而且,1000 0001 - 1111 1111並不是-1到-127的二進位制表示,正好相反,1000 0001 - 1111 1111它是-127到-1的二進位制表示。
現在該回到前面說的了,「負數在計算機中以補碼的形式儲存」。那麼,什麼是補碼?
這裡,先說下原碼。首先,絕對值相同的數的原碼相同(不包括符號位)。那麼我們說正數的原碼應該就很好理解了,就是正數的二進位制表示。
再引出另乙個概念,反碼。反碼就是原碼按位取反的結果。
注意,正數的原碼、反碼和補碼一樣,均是原碼的形式。
如果,原碼和反碼的概念我們已經回憶起來了,那該說下補碼了。
補碼是反碼加1之後的結果。
舉個例子
十進位制 原碼 反碼 補碼 二進位制
86 0101 0110 0101 0110 0101 0110 0101 0110
-86 1101 0110 1010 1001 1010 1010 1010 1010
似乎一切都說的通了。
負數二進位制表示
負數在計算機中用補碼表示。這是教科書上到表示,由於時間久遠,又由於上課沒好好學,以至於補碼是啥,在心中沒留下任何到痕跡,補習一下。原碼 整數在記憶體中用原碼表示,即按絕對值大小轉換成二進位制 如 b 00000101 b 是 b 5 b 到二進位制表示 反碼 將二進位制數按位取反,所得的新二進位制數...
負數的二進位制表示
原碼 反碼 補碼 反碼 1 負數的二進位制表示法 比如,假設有一 int 型別的數,值為5,那麼,我們知道它在計算機中表示為 00000000 00000000 00000000 00000101 5轉換成二制是101,不過int型別的數占用4位元組 32位 所以前面填了一堆0。現在想知道,5在計算...
負數的二進位制表示
原碼 正數原碼就是其二進位制。負數的原碼就是其二進位制,並將最高位作為符號位設為1。eg 1 原碼為 1000 0001複數進行運算時用補碼表示負數補碼 負數原碼不考慮最高符號位的原碼的反碼 1 eg 1 的補碼為 1111 1110 反碼 1 1111 1111 在二進位製碼中,為了區分正負數,採...