面試惡補校園知識系列----原碼,補碼,反碼及計算規則

概念:

原碼:其實就是真實數值的二進制表示方法(只不過根據計算機不同字長表示需要不同個數的0)

比如正整數6在字長爲8的計算機中表示的原碼 0 000 0110  其中第一個數字爲符號位,爲零代表正數,第一個數字爲1則爲負數(-6的原碼就表示爲1 000 0110)

假設是在16字長的計算機中6的原碼就表示爲0 000 0000 0000 0110

反碼:若爲正數則和原碼相同,若爲負數則符號位不變,其它各位取反(若爲1取反就是0,反之亦然)

比如6的反碼爲:0 000 0110 

     -6的反碼爲: 1 111 1001

補碼:若爲正數則和原碼相同,若爲負數則符號位不變,並將反碼加1(即其它各位取反並將最低位加1)

 

加減計算:

  • 在做補碼加減法時,只需將符號位和數值部分一起參與運算,並且將符號位產生的進位丟掉即可
  • 補碼加法公式
      [X+Y]補 = [X]補 + [Y]補
  • 補碼減法公式
      [X-Y]補 = [X]補-[Y]補 = [X]補 + [-Y]補
    其中:[-Y]補稱爲負補,求負補的辦法是:對補碼的每一位(包括符號位)求反,且未位加1.

假設字長爲8的計算機byte類型所能表示的最大數是11111111,若再加1稱爲100000000(9位),但因只有8位,最高位1自然丟失。又回了00000000,所以字長爲8的二進制系統的模爲2^8。

加減計算規則參考原文:https://www.jianshu.com/p/abbdae4f3841

 

 

移位計算:

     左移與右移都先轉換成補碼形式

     左移:高位丟棄,低位補零          例:0111 1111  左移兩位得到 1111 1100    從127變成了252

     右移:低位丟棄,高位補符號位   例:0111 1111  右移兩位得到 0001 1111    從127變成了31


從補碼再轉回原碼方法:若爲正數(第一位爲0)則補碼與原碼相同,若爲負數(第一位爲1)則對這個數再次取補碼即可

 

 

與,或,異或,非運算:

位與( & ):第一個操作數的的第n位於第二個操作數的第n位如果都是1,那麼結果的第n位也爲1,否則爲0

5&3 =1

5轉換爲二進制:0000 0000 0000 0000 0000 0000 0000 0101

3轉換爲二進制:0000 0000 0000 0000 0000 0000 0000 0011

-------------------------------------------------------------------------------------

1轉換爲二進制:0000 0000 0000 0000 0000 0000 0000 0001

位或( | ):第一個操作數的的第n位於第二個操作數的第n位 只要有一個是1,那麼結果的第n位也爲1,否則爲0

5|3 = 7

5轉換爲二進制:0000 0000 0000 0000 0000 0000 0000 0101

3轉換爲二進制:0000 0000 0000 0000 0000 0000 0000 0011

-------------------------------------------------------------------------------------
7轉換爲二進制:0000 0000 0000 0000 0000 0000 0000 0111

位異或( ^ ):第一個操作數的的第n位於第二個操作數的第n位 相反,那麼結果的第n位也爲1,否則爲0

5^3 = 6

5轉換爲二進制:0000 0000 0000 0000 0000 0000 0000 0101

3轉換爲二進制:0000 0000 0000 0000 0000 0000 0000 0011

-------------------------------------------------------------------------------------
6轉換爲二進制:0000 0000 0000 0000 0000 0000 0000 0110

位非( ~ ) :(位非是一元操作符)

~5 = -6

5轉換爲二進制:0000 0000 0000 0000 0000 0000 0000 0101
-------------------------------------------------------------------------------------

-6轉換爲二進制:1111 1111 1111 1111 1111 1111 1111 1010


參考:https://blog.csdn.net/xiaochunyong/article/details/7748713

至於爲何要用補碼做計算,是因爲計算機爲了簡化電路只保留了加法器,現代計算機都以補碼形式存儲數據,而補碼可以讓加減法都使用加法電路實現

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章