【進制轉換】原碼反碼和補碼的理解以及進制轉換


一、編碼理解:

1、原碼:

  • 正數:按照絕對值大小轉換成的二進制數;
  • 負數:按照絕對值大小轉換成的二進制數,然后最高位補1,稱為原碼。
00000000 00000000 00000000 00000101 是 5的 原碼;
10000000 00000000 00000000 00000101 是 -5的 原碼。

2、反碼:

  • 正數:與原碼相同;
  • 負數:該數的原碼除符號位外各位取反。
正數00000000 00000000 00000000 00000101 的反碼還是 00000000 00000000 00000000 00000101 ;
負數10000000 00000000 00000000 00000101每一位取反(除符號位),得11111111 11111111 11111111 11111010。
稱:10000000 00000000 00000000 00000101 和 11111111 11111111 11111111 11111010互為反碼。

3、補碼:

  • 正數:與原碼相同;
  • 負數:該數的原碼除符號位外各位取反,然后在最后一位加1。
10000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111 11111010。 
那么,補碼為: 
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011 
所以,-5 在計算機中表達為:11111111 11111111 11111111 11111011。轉換為十六進制:0xFFFFFFFB。

二、二進制

數據的二進制表示即為數據的補碼,也是計算機底層的存儲方式。

  1. 正數的反碼和補碼都與原碼相同。
  2. 負數的原碼為:絕對值轉換為二進制,然后最高位補1,稱為原碼;
  3. 負數的反碼為:對該數的原碼除符號位外各位取反。
  4. 負數的補碼為:對該數的原碼除符號位外各位取反,然后在最后一位加1。

三、十進制轉二進制

3.1 整數:即求補碼的方法(除基倒取余法)

3.1.1 正整數:

  1. 輸入一個十進制數n;
  2. 每次用n除以2;
  3. 把余數記下來,再用商去除以2...
  4. 依次循環,直到商為0結束;
  5. 把余數倒着依次排列,就構成了轉換后的二進制數。

3.1.2 負整數:

  1. 先取絕對值得到正數;
  2. 求出該正數的二進制表示,方法參考上面;
  3. 對上一步的結果最高位補1,得到該負整數的原碼;
  4. 根據改原碼求補碼,即為二進制;(除符號位外各位取反,然后在最后一位加1。)

3.2 小數:(不分正負)

3.2.1 方法:乘2取整,順序排列

3.2.2 具體步驟

  1. 用2乘十進制小數,可以得到積;
  2. 將積的整數部分取出,再用2乘余下的小數部分,又得到一個積;
  3. 再將積的整數部分取出,如此進行,不斷重復2;
  4. 直到積中的小數部分為零或者達到所要求的精度為止。

四、二進制轉十進制

4.1 正整數:(最高位為符號位)

例:

二進制正數:0000 1010 (十進制為10)
轉換為十進制數: 1*2^3+0*2^2+1*2^1+0*2^0=10

4.2 負整數:(最高位為符號位)

+10的原碼:0000 1010
-10的原碼:1000 1010
-10的反碼:1111 0101
-10的補碼:1111 0110
最終。-10的二進制:1111 0110 (十進制為-10)
轉換為十進制數: 
 1*2^6-1*2^5-1*2^4-0*2^3-1*2^2-1*2^1-0*2^0
=2^4-2^2-2^1=16-4-2=10(前面加一個負號,即為-10)

注意:

  1. 最高位為符號位,不做計算;
  2. 計算時,從左往右,從2^0開始。所以8位有符號二進制,符號位后的第一位對應的是2^6,而不是2^7

4.3 小數:

二進制:0000 1010.1100
轉換為十進制:
小數點前+小數點后
= (1*2^3+0*2^2+1*2^1+0*2^0)+(1*2^(-1)+1*2^(-2)+0*2^(-3)+0*2^(-4))
=10+0.75
=10.75

五、參考:

  1. 負數與二進制換轉方法 - 益達先生的個人空間 - 開源中國 https://my.oschina.net/lolsi/blog/269154
    注:主要是對原碼、反碼、補碼的介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM