計算機中數字的二進制存儲形式


今天,做個關於二進制的算法題,突然有個問題一直想不通為什么~5是6,計算機基礎知識不過關啊,所以現在來彌補下,正數和負數在計算機中是怎么存儲和計算的。

講講計算機中的存儲形式:

計算機中存儲的數都是以補碼的方式存儲的,而正數的原碼,反碼,補碼都是一樣的。但是負數的原碼,反碼,補碼是不一樣的。

 

 

下面都是以java中的int i=5為例。

 

正數5的原碼就是其二進制碼:00000000 00000000 00000000 00000101

            反碼是:00000000 00000000 00000000 00000101

     補碼是:00000000 00000000 00000000 00000101

-5的原碼是:10000000 00000000 00000000 00000101;

      反碼是:11111111 11111111 11111111 11111010;//除符號位所有位取反

      補碼是: 11111111 11111111 11111111 11111011;//反碼加1

 

那么java中~5是怎么計算的?

~5的補碼:

  原碼:00000000 00000000 00000000 00000101

      取反得補碼:11111111 11111111 11111111 11111010

求~5的原碼:由上面的補碼的反碼:11111111 11111111 11111111 11111001

           取反得原碼:10000000 00000000 00000000 00000110;//也就是-6

 

計算機中的計算都是以補碼的形式進行計算的:

-5的補碼是: 11111111 11111111 11111111 11111011

1的補碼是:00000000 00000000 00000000 00000001

那么-5+1就是:

                     

      11111111 11111111 11111111 11111011
+    00000000 00000000 00000000 00000001
       11111111 11111111 11111111 11111100                                                          

 

 

 

 

11111111 11111111 11111111 11111100是計算機中的補碼,減1轉換為反碼是:11111111 11111111 11111111 11111011,取反得原碼是:10000000 00000000 00000000 00000100;

 

 

補充一點:

二進制的減法:

0-0=1-1=0 
1-0=1
0-1=1(向高位借位)
  1 1 0 0 0 0 1 1  
-  0 0 1 0 1 1 0 1
-------------------
  1 0 0 1 0 1 1 0


免責聲明!

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



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