Java按位取反運算子“~”
關於學習java中的按位取反(~)的問題
2013年07月16日 00:21:51 daokai1993 閱讀數:1468 標籤: 新手
之前不知道按位取反到底是怎麼計算的
百度谷歌的半天 也沒有什麼具體的計算防暑 後來自己琢磨了一會兒 發現了一點按位取反的技巧 在此分享一下
負數的取反 就是在原碼的基礎上取反碼 然後在取補碼(補碼=反碼+1)當反碼的最後一位數已經為1的時候 補碼再+1後就應該向前進一位
例如十進位制數: -6 -6在java中的原碼為10000000 00000000 00000000 00000110 其反碼為11111111 11111111 11111111 11111001
所以-6的補碼就是11111111 11111111 11111111 11111010 再將補碼取反就是~(-6)的二進位制數:00000000 00000000 00000000 00000101 轉換為10進位制就是5.
正數的原碼=補碼=反碼
正數的按位取反其實可以參照負數
其計算方式可以按負數的逆思路直接推出
比如說一個十進位制數:5
5的原碼、反碼、補碼全部都是00000000 00000000 00000000 00000101
那麼先將5的二進位制數取反,並得到:11111111 11111111 11111111 11111010(把它看做是某個數的補碼)
然後再將得到某個數的補碼(姑且稱之為補碼吧)-1
就得到反碼:11111111 11111111 11111111 11111001(因為補碼最後一位數為0 所以往前一位“借數”,所以最後一位數為1)
最後將反碼譯為原碼:10000000 00000000 00000000 00000110 所以~(5)就為-6.
注:以上純屬本人在探索過程中的個人理解,如果錯誤,希望大神指出!謝謝!
以上內容轉自:https://blog.csdn.net/smilecall/article/details/42454471