Java按位運算符之按位取反


一 數據儲存形式
二進制在內存中以補碼的形式存在。
補碼首位是符號位,0表示該數是正數,1表示該數是負數。
 
例如:
 
數值
帶符號的二進制原碼
(首位表示符號位)
補碼
內存中的形式
( *表示無效位,其數量取決於分配的內存空間)
9 01001 01001 0***1001
-5 1***101  1***011  1***011 
 
 
二 補碼是什么
正數: 補碼 = 反碼 = 原碼
負數: 原碼取反 = 反碼,反碼+1 = 補碼
 
⚠️ 運算時: 符號位不變,有效位進行運算!帶*號的為無效位。
 
例如:
  原碼 反碼 補碼
9 01001 01001 0***1001
-5 1***101 1***010 1***011
原碼中: 9的有效位為1001,5的有效位為101。  
 
三 計算機輸出數據的方式
 
                轉換   
內存中補碼 ———————> 原碼 (顯示)
 
 
四 按位取反運算符"~"的原理
按位取反: 將內存中的補碼按位取反,包括 符號位!!
 
例如:
                                      按位取反~                               原碼顯示
 9  ---->    補碼 0***1001  --------------->    補碼 1***0110    -------------->  1***1010  (-10)     
 
                                  按位取反~                                     原碼顯示
-5 ---->    補碼 1***011    --------------->     補碼 0***100     -------------->  4  (補碼是正數,所以原碼也為4) 
 
 


免責聲明!

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



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